【问题标题】:GSON 2.0+ - Deserialize and parse arbitrary fieldsGSON 2.0+ - 反序列化和解析任意字段
【发布时间】:2014-02-20 08:37:12
【问题描述】:

我正在从 Web 服务中提取 JSON 字符串,该字符串的样式在以下版本中。显示的 id 的 JSON 字符串字段将是任意的,具体取决于 get 中发送的内容。我已经使用 gson 跟踪了一些示例,他们讨论了获取 json 并将其运行到对象中以处理任意字段值。 How to decode JSON with unknown field using Gson?Dealing with randomly generated and inconsistent JSON field/key names using GSON

我的问题是,一旦创建对象以提取特定字段,我该怎么处理它。我有一个自定义类来从对象内部提取值(id、名称、配置文件)等,但我不知道如何引用这两者,或者如何从对象中提取信息放入一个数组列表或类似的东西中。

{
   "415943": {
      "id": 415943,
      "name": "Zoro Roronoa",
      "profileIconId": 580,
      "revisionDate": 1390848107000,
      "summonerLevel": 30
   },
   "19758386": {
      "id": 19758386,
      "name": "Zoro",
      "profileIconId": 535,
      "revisionDate": 1390855130000,
      "summonerLevel": 30
   }
}

Main.java

Gson gson = new Gson();
Object o = gson.fromJson(jsonStatsString, Object.class);

【问题讨论】:

    标签: java android json gson


    【解决方案1】:

    您可以使用包含 JSON 中映射字段的自定义对象,并将它们转换为列表:

    List<MyObject> items =
                    gson.fromJson(json, new TypeToken<List<MyObject>>() { }.getType());
    

    【讨论】:

    • 我不断收到错误"Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2"
    • 那是因为看起来 JSON 不是一个数组,而是一个包含多个对象的对象。我将只取返回的字符串并将外部 {} 替换为 [],使其成为一个数组。那么它应该可以工作了。
    • 我最终没有使用列表对象,但您的答案中的 TypeToken 部分正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2019-01-05
    • 1970-01-01
    • 2012-08-09
    • 2012-12-25
    相关资源
    最近更新 更多