是否可以像这样使用Gson反序列化复杂的JSON
{
item1:"text1"
item2:{
item3:"text3"
item4:"text4"
}
}
要:
class MyClass {
String item1; //item1 == "text1";
String item4; //item4 == "text4";
}
答案 0 :(得分:2)
正确的模型是:
class MyClass {
String item1;
Item2 item2;
}
class Item2{
String item3;
String item4;
}
答案 1 :(得分: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(如上所述)上面的链接)。
答案 2 :(得分: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();
}
}
}
答案 3 :(得分:-1)
这篇文章可能会有所帮助..
它有一个解析像这样的复杂JSON的工作示例..
{" pageInfo":{" pageName":" TheTestbook"," pagePic":" content.jpg&#34 ; },"帖子":[{" postId":" 123456"," postName":" Java Post" }]}
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/