2013-03-08 72 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)); 
相关问题