【发布时间】:2022-01-26 15:48:56
【问题描述】:
我正在尝试使用 GSON 反序列化复杂的 JSON 结构。 API 提供者通过在结果中提供一个随机名称的数组来使事情复杂化。
这是(简化/通用)JSON:
{
"field_1": "value",
"field_2": "value",
"field_3": {
"RANDOM_NAME": [
{
"array_field_1": "value",
"array_field_2": "value",
"array_field_3": "value"
},
{
"array_field_1": "value",
"array_field_2": "value",
"array_field_3": "value"
}
]
},
"field_4": "value"
}
这是对应的(高度简化的)POJO:
public class responseObject {
String field_1;
String field_2;
Field3 field_3;
String field_4;
class Field3{
ArrayObject[] arrayObjects;
}
class ArrayObject{
String array_field_1;
String array_field_2;
String array_field_3;
}
}
但是,当我运行 responseObject response = new Gson().fromJson(getJSON(),responseObject.class); 时,我得到以下调用堆栈:
表明field_3 没有正确反序列化,并且不包含ArrayObject 的数组。
在this 发布答案参考如何将数据转换为地图,但在我的情况下,数组中每个项目的数据结构实际上比这个简化示例大得多,它违背了使用 GSON 的目的如果我必须从复杂的嵌套地图列表中手动选择我需要的数据。在随机对象是数组而不是普通 json 对象的情况下,也无法让这些答案正常工作。
如何让 JSON 中随机命名的数组正确反序列化为变量 responseObject.Field3.arrayObjects??
【问题讨论】:
-
这是一个复杂的结构。两步反序列化怎么样?第一步是使用带有
的 map。之后再次反序列化字符串值。 -
你能用 gson 演示一下如何通过一两个简单的步骤做到这一点吗?
-
类似这样:第一步:public class responseObject { String field_1;字符串字段_2;字段 3 字段_3;字符串字段_4;类 Field3{ Map
field_3; } 类 ArrayObject{ 字符串 array_field_1;字符串数组_字段_2;字符串数组_字段_3; } } 第二步:for(String key: field_3.keySet()) { //对 field_3.get(key) 应用反序列化 }