0

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

我正在解析一个看起来像这样的 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。谢谢!

4

1 回答 1

1

旧响应周围的方括号表示一个数组(在这种情况下是一个元素)。看起来新 API 只返回一个包装对象,而不是一个包装对象数组。这行得通吗?

wrapperType = new TypeToken<WrapperObject>() {}.getType();
WrapperObject wrapperObject = new Gson().fromJson(response, wrapperType);
于 2012-10-30T21:04:44.233 回答