【发布时间】: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 对象中获取所有键/值对并将它们放入映射中