【问题标题】:Parsing JSON using Google GSON: reading values directly from child objects使用 Google GSON 解析 JSON:直接从子对象中读取值
【发布时间】:2012-08-15 07:03:00
【问题描述】:

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

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

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

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

我做错了什么?

【问题讨论】:

  • +1。令人惊讶的是,Gson 似乎没有像 @SerializedName("Name/object1")@SerializedName("Name.object1") 这样的符号来直接从子对象中获取值。
  • (顺便说一句,删除了 Android 标签,因为这根本不是 Android 特定的。)

标签: java json gson


【解决方案1】:

您的对象必须保留 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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 对不起,我错过了那些括号,我有它们
    • 您仍然错过了 1 个括号。就在最后。
    【解决方案3】:

    我认为您不能拥有“名称/object1/field”,您必须直接指定键名而无需层次结构。 参考How to parse dynamic JSON fields with GSON?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多