0

我正在努力寻找一种将这个 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 中的人员列表,但它不存在。

4

2 回答 2

0

将对象放在数组旁边、在数组内部似乎并不明智。把事情这样说是有道理的:

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

然后你可以只Person上课:

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

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

于 2013-03-08T04:55:38.450 回答
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));
于 2013-03-08T05:02:09.460 回答