1

我在反序列化以下 json 时遇到问题:

{
   "17":"asdf",
   "18":"fdsa",
   "19":"gfds",
   "34":"vcxz",
   "35":"oiue",
   "36":"oiuy"
}

到:

public class CategoryList {

    List<Category> list;
}

public class Category {

    String id;
    String name;
}

我收到以下信息IllegalStateException

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2

请告诉我哪里出错了。

4

2 回答 2

1

该错误是不言自明的,反序列化器需要一个 JSON 数组,因为您的类包含一个List.

尝试以下 JSON:

{
    "list": [
        {
            "id": "17",
            "name": "asdf"
        }
    ]
}

应该正确序列化

于 2013-10-23T22:00:10.860 回答
1

下面的json

{
   "17":"asdf",
   "18":"fdsa",
   ...
}

是 JSON 对象而不是数组。您的类(Category 和 CategoryList)应该使用以下 json:

{
    list: [
        {id: 17, name: "asdf"},
        {id: 18, name: "fdsa"},
        ....
    ]
}

更改您的 json 或类。

编辑:问题是(如果我理解您的示例)您的 json 对象具有可变数量的字段。这意味着您必须使用 hashmap 之类的东西而不是您的类。尝试将您的 json 反序列化为

Map<int, String>

您可以在此答案中找到一些帮助:https ://stackoverflow.com/a/8103092/2880555 (您将被重定向到此链接http://programmerbruce.blogspot.com/2011/06/gson-v-jackson。 html并要求在该页面中搜索“Gson Code to turn any JSON object into a Map”)。

于 2013-10-23T22:03:58.363 回答