我使用gson反序列化json数据。现在,数据有一个奇怪的地方,即某个字段可能是空字符串或对象(类似对象的嵌套树状结构)。该如何处理?
json看起来像这样:
[
{
"data": {
"foo": "bar",
"child": "" <-- If no children
}
},
{
"data": {
"foo": "baz",
"child": { <-- If a child
"foo": "bat",
"child": ""
}
}
},
]
pojo如下所示:
public class Data {
private String foo;
private Data child;
}
当试图反序列化json和 child
字段是 ""
,引发的异常为:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
3条答案
按热度按时间xlpyo6sf1#
阅读时
JsonElement
child
你需要检查它是什么样的物体,我的意思是检查它是否是JsonObject
或者String(or any Primitive data type)
```JsonArray response = your_array_response;
for (int i = 0; i < response.size(); i++) {
ctehm74n2#
使用
Object
作为您的child
字段中,您将需要实现不同的策略来处理不同的类型child
字段可以在使用反序列化Data
示例1dkrff033#
我不是gsonMaven,我正在使用
Jackson
但看起来您必须使用自定义类型适配器或反序列化程序。这里也做过类似的事情https://groups.google.com/forum/#!topic/google gson/knf5hadty14
Long
以及Integer
类型。我想您将不得不采用所提供的解决方案来满足您的需要。
此外,请求的行为在这里被报告为缺少特性/错误https://github.com/google/gson/issues/540,作为结果
TypeAdapter
建议适合做这项工作