我试图将这个json反序列化为对象数组:
[{ "name": "item 1","tags": ["tag1"] },{ "name": "item 2","tags": ["tag1","tag2"] },{ "name": "item 3","tags": [] },{ "name": "item 4","tags": "" }]
@H_301_8@我的java类看起来像这样:
public class MyObject { @Expose private String name; @Expose private List
@H_301_8@ 问题是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@H_301_8@
它是做什么的,它检查“标签”是否是JsonArray.如果是这种情况,它会像往常一样对其进行反序列化,否则您不会触摸它,只需使用空列表创建对象即可.
一旦你编写了它,你需要在JSON解析器中注册它:
Gson gson = new GsonBuilder().registerTypeAdapter(MyObject.class,new MyObjectDeserializer()).create();
//here json is a String that contains your input
List@H_301_8@
运行它,我得到输出:
MyObject{name='item 1',tags=[tag1]}
MyObject{name='item 2',tags=[tag1,tag2]}
MyObject{name='item 3',tags=[]}
MyObject{name='item 4',tags=[]}
@H_301_8@