我试图将这个json反序列化为对象数组:
[{
"name": "item 1","tags": ["tag1"]
},{
"name": "item 2","tags": ["tag1","tag2"]
},{
"name": "item 3","tags": []
},{
"name": "item 4","tags": ""
}]
我的java类看起来像这样:
public class MyObject
{
@Expose
private String name;
@Expose
private List
问题是json的tags属性,它可以只是空字符串或数组.现在gson给了我错误:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但是是STRING
我应该如何反序化这个json?
我对这个json没有任何控制权,它来自第三个pary api.
最佳答案
I do not have any control to this json,it comes from 3rd pary api.
如果您无法控制数据,那么最好的解决方案是在我看来创建一个自定义反序列化器:
class MyObjectDeserializer implements JsonDeserializer
它是做什么的,它检查“标签”是否是JsonArray.如果是这种情况,它会像往常一样对其进行反序列化,否则您不会触摸它,只需使用空列表创建对象即可.
一旦你编写了它,你需要在JSON解析器中注册它:
Gson gson = new GsonBuilder().registerTypeAdapter(MyObject.class,new MyObjectDeserializer()).create();
//here json is a String that contains your input
List
运行它,我得到输出:
MyObject{name='item 1',tags=[tag1]}
MyObject{name='item 2',tags=[tag1,tag2]}
MyObject{name='item 3',tags=[]}
MyObject{name='item 4',tags=[]}