2015-12-21 110 views
2

反序列化複雜的JSON是否可以反序列化使用GSON複雜的JSON這樣使用GSON

{ 
    item1:"text1" 
    item2:{ 
     item3:"text3" 
     item4:"text4" 
    } 
} 

要:

class MyClass { 
    String item1; //item1 == "text1"; 
    String item4; //item4 == "text4"; 
} 
+0

爲什麼項目2和項目3會從模式中消失,爲什麼項目4會成爲主要對象的直接子項?你能描述一下你想要的嗎? –

回答

2

正確的模式應該是:

class MyClass { 
    String item1; 
    Item2 item2; 
} 

class Item2{ 
    String item3; 
    String item4; 
} 
+0

是的,它是代表輸入的完整模型,但是如果'MyClass'不能被修改?我相信這是OP要求的。 –

+1

@Gaël是的,在我看到你的回答後,我認爲可能是這種情況,這就是爲什麼我向你投票。雖然我會在這裏留下這個答案,以防他/她實際上要求模型:) –

1

如果您不能改變你的模型,即MyClass,你將不得不編寫一個自定義的解串器。例如, 見How do I write a custom JSON deserializer for Gson?

在你的情況下,它可能是這樣的:

@Override 
public MyClass deserialize(JsonElement json, Type type, 
     JsonDeserializationContext context) throws JsonParseException { 

    JsonObject jobject = json.getAsJsonObject(); 

    String item1 = jobject.get("item1").getAsString(); 
    String item4 = jobject.get("item2").getAsJsonObject().get("item4").getAsString(); // TODO check for NPE 

    return new MyClass(item1, item4); 
} 

編輯:您不必手動反序列化的一切,如果String!而非你有複雜的對象仍可以調用部分Gson對這些對象(如上面鏈接中提到的)。

0

解析出這樣的JSON不應該太難。這是我的方式。

public void parseJSON(JSONObject input) { 
    MyClass myClass = new MyClass(jsonObject); 
} 

public class MyClass { 

    public JSONObject jsonObject; 
    public String item1; 
    public String item3; 
    public String item4; 

    public MyClass(JSONObject jsonObject) { 
     this.jsonObject = jsonObject; 
     parseInput(); 
    } 

    public void parseInput() { 
     try { 
      item1 = (String) jsonObject.get("item1"); 
      JSONObject obj2 = (JSONObject) jsonObject.get("item2"); 
      item3 = (String) obj2.get("item3"); 
      item4 = (String) obj2.get("item4"); 

      Log.d("OUTPUT", item1+", "+item3+", "+item4); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
-1

這篇文章可能會有所幫助..

它解析這樣一個複雜的JSON的工作示例..

{ 「pageInfo」:{ 「頁面名」: 「TheTestbook」 「pagePic」: 「content.jpg」}, 「上崗」:[{ 「帖子ID」: 「123456」, 「postName」: 「Java的郵報」}]}

 public class JavaJsonSerializer { 

    public static void main(String[] args) { 
     String jsonString = "{ \"pageInfo\": {  \"pageName\": \"TheTestbook\",  \"pagePic\": \"content.jpg\" }," 
    + " \"posts\": [{  \"postId\": \"123456\",  \"postName\": \"Java Post\" }]}"; 

    Gson gson = new Gson(); 
    BlogPost blogPost = gson.fromJson(jsonString, BlogPost.class); 
    System.out.println(blogPost); 
} 

} 

你可以在這裏看到完整的示例.. http://howtolearnjava.com/how-to-parse-json-in-java-marshaling-to-java-objects/

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – Leigh

+0

感謝Leigh的建議,我現在已經包含了代碼片段。 –