2013-03-08 74 views
0

我在努力尋找一種方法來將此JSON輸出序列化或反序列化爲Java類?誰能提供代碼示例?GSON如何使用此數組反序列化爲一個類json字符串

[ 
    { 
     "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中的人員,但它不存在。

+1

您目前有哪些代碼? – Perception 2013-03-08 02:13:36

+0

@Perception public class Test { private String topic; 私有列表 listOfPersons; } 我試過類似 gson.fromJson(this.json,Test []。class); 但沒有運氣,因爲gson在json中查找listOfPersons,但它不存在。 我希望這是有道理的? – user1839247 2013-03-08 04:44:57

回答

0

看起來好像沒有一個數組旁邊的對象在數組內部是有道理的。這將是有意義的把事情是這樣的:

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

然後,你可以只是有一個Person類:

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

...你可以用你已有的代碼反序列化。

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)); 
相關問題