簡體   English   中英

GSON如何使用此數組json字符串反序列化為一個類

[英]GSON How to deserialize to a class with this array json string

我正在努力尋找一種方法來將此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中查找人員列表,但是它不存在。

似乎在數組內部的數組旁邊沒有對象是明智的。 這樣放置是很有意義的:

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

然后,您可以擁有一個Person類:

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

...並且您可以反序列化您已有的代碼。

這里的問題是您的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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM