反序列化複雜的JSON是否可以反序列化使用GSON複雜的JSON這樣使用GSON
{
item1:"text1"
item2:{
item3:"text3"
item4:"text4"
}
}
要:
class MyClass {
String item1; //item1 == "text1";
String item4; //item4 == "text4";
}
反序列化複雜的JSON是否可以反序列化使用GSON複雜的JSON這樣使用GSON
{
item1:"text1"
item2:{
item3:"text3"
item4:"text4"
}
}
要:
class MyClass {
String item1; //item1 == "text1";
String item4; //item4 == "text4";
}
正確的模式應該是:
class MyClass {
String item1;
Item2 item2;
}
class Item2{
String item3;
String item4;
}
是的,它是代表輸入的完整模型,但是如果'MyClass'不能被修改?我相信這是OP要求的。 –
@Gaël是的,在我看到你的回答後,我認爲可能是這種情況,這就是爲什麼我向你投票。雖然我會在這裏留下這個答案,以防他/她實際上要求模型:) –
如果您不能改變你的模型,即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對這些對象(如上面鏈接中提到的)。
解析出這樣的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();
}
}
}
這篇文章可能會有所幫助..
它解析這樣一個複雜的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/
雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – Leigh
感謝Leigh的建議,我現在已經包含了代碼片段。 –
爲什麼項目2和項目3會從模式中消失,爲什麼項目4會成爲主要對象的直接子項?你能描述一下你想要的嗎? –