使用Gson反序列化复杂的JSON

时间:2015-12-21 15:25:11

标签: java android json gson deserialization

是否可以像这样使用Gson反序列化复杂的JSON

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

要:

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

4 个答案:

答案 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/