GSON如何使用此数组json字符串反序列化为类

时间:2013-03-08 01:25:34

标签: java json gson

我很难找到一种方法将这个JSON输出序列化/反序列化为Java类?有人可以提供代码示例吗?

[
    {
        "topic": "this is my topic"
    },
    [
        {
            "name": "John"
        },
        {
            "age": 100
        }
    ]
]

我目前的尝试使用这个Javabean:

public class Test {
    private String topic;
    private List<Person> listOfPersons;
}

我试图将数据反序列化为使用Gson:

gson.fromJson(this.json, Test[].class);

但反序列化失败了,因为Gson正在寻找JSON中的人员列表,但它不存在。

2 个答案:

答案 0 :(得分:0)

在数组内部,数组旁边的对象似乎并不敏感。以这种方式放置是有意义的:

{
    "topic": "this is my topic",
    "listOfPersons" : [
        {
            "name": "John",
            "age": 100
        },
        {
            ... another person
        }
    ]
}

然后你可以有一个Person类:

public class Person {
    private String name;
    private int age;
}

...您可以使用已有的代码进行反序列化。

答案 1 :(得分:0)

这里的问题是你的JSON数据在语法上是正确的,但在语义上是模糊的。我的意思是,它似乎代表了一个多态数组,其中数组中的每个项目都是不同的类型。

此外,代表“人”的部分似乎已经被非规范化,其中人的每个属性被表示为数组中的单独对象。确实非常奇怪。不幸的是,仅仅通过查看数据就无法确定代表什么类型,并且没有提供允许Gson为您反序列化数据的提示。在这种情况下,您可以做的最好的事情是手动解析信息。

Test test = new Test();
JsonArray rootArray = new JsonParser().parse(jsonString);
test.setTopic(rootArray.get(0).get("topic");

Person person = new Person();
JsonArray personArray = rootArray.get(1);
person.setName(personArray.get(0).get("name"));
person.setAge(personArray.get(1).get("age"));

test.setListOfPersons(Arrays.asList(person));