使用GSON错误进行JSON反序列化 - 这不是JSON数组

时间:2012-10-30 20:48:58

标签: json serialization gson

我知道已经有很多关于这个话题的问题,但是我被困在这里,我确信这是非常愚蠢的事。

我正在解析一个看起来像这样的JSON Api(在这里重命名和简化):

{
"merchant": {
    "name": "TestCo",
    "id": 108
},
"category": [
    {
        "merchant_id": 108,
        "category_name": "Baby Supplies",
        "category_id": 57,
    },
    {
        "merchant_id": 108,
        "category_name": "Dining",
        "category_id": 59,
    }
]}

我有一个包装类,定义为:

public class WrapperObject {
  public MerchantObject merchant;
  public List<CategoryObject> category;}

商人和商人类别是他们自己正确定义的类。然后我尝试反序列化:

collectionType = new TypeToken<List<WrapperObject>>() {}.getType();
List<WrapperObject> wrapperObject = new Gson().fromJson(response, collectionType);

这令人担忧,GSON报告说“这不是一个JSON数组”。

直到上周,当API发生变化时,这种情况一直很好。 JSON的唯一区别是它过去看起来像这样(注意数据周围的额外包装数组):

[{
    "merchant": {
        "name": "TestCo",
        "id": 108
    },
    "category": [
        {
            "merchant_id": 108,
            "category_name": "Baby Supplies",
            "category_id": 57,
        },
        {
            "merchant_id": 108,
            "category_name": "Dining",
            "category_id": 59,
        }
    ]}]

如何调整代码以解析新的JSON?注意,我无法控制JSON。谢谢!

1 个答案:

答案 0 :(得分:1)

旧响应周围的方括号表示一个数组(在本例中为一个元素)。看起来新的API只返回一个包装器对象,而不是一个包装器对象数组。这有用吗?

wrapperType = new TypeToken<WrapperObject>() {}.getType();
WrapperObject wrapperObject = new Gson().fromJson(response, wrapperType);