java – Gson,如何反序列化数组或空字符串

前端之家收集整理的这篇文章主要介绍了java – Gson,如何反序列化数组或空字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图将这个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=[]}

猜你在找的Android相关文章