这可能有点长,所以请耐心等待..
我正在开发一个Android项目。我有一个JSON字符串,我需要反序列化为表示JSON结构的对象,JSON字符串如下所示:
{"parents":[
{"parent":{
"id":1,
"name":"Sam",
"childs":[
{
"child":{
"id":1,
"name":"Alice",
"books":[
{
"book":{
"id":1,
"name":"Alice in Wonderland"
}
}
]
}
}
]
}
}
]}
请注意,对于数组,有重复的值(即许多父级和多个子级),我只需在此处添加一行以使其缩短。
通过这个我创建的类来容纳结构:
public class Containers{
private List<Parent> parents;
//setter and getter..
}
public static class Parent extends CommonItem {
private List<Child> childs;
//setter and getter..
}
public static class Child extends CommonItem {
private List<Book> books;
//setter and getter..
}
public class CommonItem{
private int id;
private String name;
//setter and getter
}
请注意,我创建了一个公共类来容纳重复属性。 以下是我使用GSON解析它们的方法:
Gson gson = new Gson();
Containers parents = gson.fromJson(jsonString, Containers.class);
解析后(没有错误)我尝试检索对象。父列表中的对象计数是正确的(即JSON字符串中有5个父项,父列表中有5个父对象)。但是,它们的所有属性都不存在,并且子树也丢失了。
我尝试了很多配置,包括删除扩展类并将所有id和name放在相应的类中,但结果仍然相同。
任何人都可以告诉我哪里出错?
Thanx一堆!
答案 0 :(得分:1)
您的JSON和Java类不匹配。
让我们阅读
{"parents":[
{"parent":{
"id":1,
"name":"Sam",
"childs":[
{
"child":{
"id":1,
"name":"Alice",
"books":[
{
"book":{
"id":1,
"name":"Alice in Wonderland"
}
}
]
}
}
]
}
}
]}
您的顶级对象的List
类具有parents
作为其属性。您的Java类Container
具有parents
属性。好。
现在,此列表parents
是List
个具有parent
属性的对象。您的Parent
对象是否具有parent
属性?否。
进一步向下,每个Parent
都有id
,name
和List
个对象childs
(子项,应该是)属性child
属性,您的Child
班级有吗?否。
同样,适用于books
。
您是否尝试过类似JSON的课程
{"parents":[
{
"id":1,
"name":"Sam",
"childs":[
{
"id":1,
"name":"Alice",
"books":[
{
"id":1,
"name":"Alice in Wonderland"
}
]
}
]
}
]}