使用gson反序列化json

时间:2013-10-23 21:54:06

标签: java json deserialization gson

我在跟踪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

请告诉我哪里出错了。

2 个答案:

答案 0 :(得分:1)

错误是相当不言自明的,deserialiser需要一个JSON数组,因为你的类包含List

尝试以下JSON:

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

应正确序列化

答案 1 :(得分: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代码将任何JSON对象转换为地图”