2

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

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

我尝试了以下方法来获取 field1 的值,但它不起作用

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

我究竟做错了什么?

4

3 回答 3

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);
于 2012-08-20T00:49:22.777 回答
1

您的 JSON 无效。JSON 可能以 { 或 [ 开头,因此您需要用另一对 {} 包装您的字符串。

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

于 2012-08-19T19:40:55.680 回答
0

我认为您不能拥有“名称/对象1/字段”,您必须直接指定键名而无需层次结构。请参阅如何使用 GSON 解析动态 JSON 字段?

于 2012-08-19T19:47:53.230 回答