【问题标题】:Gson object by object parsing for objects with different names everytimeGson逐个对象解析每次具有不同名称的对象
【发布时间】:2016-01-04 09:14:05
【问题描述】:

我必须使用以下 JSON fromat 来使用服务中的数据:

{
  "field1": {
    "key": "value"
  },
  "complexfield": {
    "name1": {
      "key": "value"
    },"name2": {
      "key": "value"
    },"name3": {
      "key": "value"
    },"name4": {
      "key": "value"
    },"name5": {
      "key": "value"
    },"name6": {
      "key": "value"
    },"name7": {
      "key": "value"
    }
  },
  "field2": {
    "key": "value"
  }
}

这里field1 & field2 具有不变的格式,我可以为其创建一个pojo,但对于complexfield,内部name 对象每次都会不同(即格式相同但其name 每次都会改变) . complexfield 也不是一个迭代它的数组,它是一个对象。有一点很清楚,我不能为此创建 pojo,我必须逐个对象,但是我想如何在每个响应中获取具有不同名称的 complexfields 内部对象?使用getAsJsonObject("what to pass here as name ?") ?

或

我可以通过获取每个子对象@runtime 的名称来迭代这样复杂的对象吗?

【问题讨论】:

  • 如果 complexField 嵌套 POJO 的数组是有限的 - 您可以注册自定义反序列化器,否则 - 您可以将 complexField 反序列化为 Map,对吗?
  • 这里的主要问题 complexfield 不是一个数组,而是一个 JSON 对象。在少数情况下,这个内部名称对象的格式也会有所不同。
  • “嵌套 POJO 的有限数组”是指可能的嵌套对象列表。您可以为您的整个对象注册自定义反序列化器并将 complexField 反序列化为 Map stackoverflow.com/questions/6096940/… 另一个示例:stackoverflow.com/questions/16590377/…
  • @ Роман Гуйван 是的,但这里的名称是处理所必需的。对象中出现的任何内容都取决于其名称。
  • 如果您将常规字段反序列化为 POJO 字段并将复杂字段内容反序列化为 Map - 您将不会遇到此问题,因为编写自定义反序列化程序将允许您将 JSON 作为令牌处理流,因此您肯定能够从复杂字段 JSON 对象中获取所有键/值对并将它们放入映射中

标签: java json gson


【解决方案1】:

我们最终使用了 Gsons JsonObject 类的 entrySet() 方法。参考:http://google-gson.googlecode.com/svn/tags/1.2.3/docs/javadocs/com/google/gson/JsonObject.html#entrySet()

我将密钥作为字符串和子对象作为JsonElement。

这个怎么用? 这是一个stackoverflow线程:Iterate over JsonObject properties

【讨论】:

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