使用Google GSON解析JSON:直接从子对象读取值

时间:2012-08-19 19:34:38

标签: java json gson

我在使用Google的Gson解析以下JSON时遇到问题:

{"Name":
    {"object1":   
       {"field1":"17",
        "field2":"360",
        "field3":"19",
        "field4":"sun",
        "field5":"rain"
       }
    }
}

我尝试过以下方法来获取field1的值,但它没有工作

@SerializedName("Name/object1/field1")
public int fieldOne;

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您的对象必须保留json指令的层次结构。对于你的例子,它将是这样的:

public class Object {

    @SerializedName("field1")
    public String fieldOne;

    @SerializedName("field2")
    public String fieldTwo;

    @SerializedName("field3")
    public String fieldThree;

    @SerializedName("field4")
    public String fieldFour;
}

public class Name {

    @SerializedName("object1")
    public Object obj;
}

public class GsonObj {

    @SerializedName("Name")
    public Name name;
}

使用以下电话:

String json = "{\"Name\":{" +
            "\"object1\":{" +
            "\"field1\":\"17\",\"field2\":\"360\",\"field3\":\"19\",\"field4\":\"sun\",\"field5\":\"rain\"}}}";

Gson gson = new Gson();
GsonObj jsonResult = gson.fromJson(json, GsonObj.class);
Log.d("test", "field one: "+jsonResult.name.obj.fieldOne);
Log.d("test", "field two: "+jsonResult.name.obj.fieldTwo);
Log.d("test", "field three: "+jsonResult.name.obj.fieldThree);
Log.d("test", "field four: "+jsonResult.name.obj.fieldFour);

答案 1 :(得分:1)

您的JSON无效。 JSON可以以{或[所以你需要用另一对{}包装你的字符串。

一个好的做法是始终先检查您的数据。我经常在这里使用它: http://jsonlint.com/

答案 2 :(得分:0)

我不认为您可以拥有“名称/对象1 /字段”,您必须直接指定密钥名称而不使用层次结构。 参考How to parse dynamic JSON fields with GSON?