在Android中使用GSON反序列化JSON字符串

时间:2012-02-29 11:23:59

标签: java android json gson

这可能有点长,所以请耐心等待..

我正在开发一个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一堆!

1 个答案:

答案 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属性。好。

现在,此列表parentsList个具有parent属性的对象。您的Parent对象是否具有parent属性?否。

进一步向下,每个Parent都有idnameList个对象childs(子项,应该是)属性child属性,您的Child班级有吗?否。

同样,适用于books

您是否尝试过类似JSON的课程

{"parents":[
        {
            "id":1,
            "name":"Sam",
            "childs":[
                    {
                        "id":1,
                        "name":"Alice",
                        "books":[
                            {
                                    "id":1,
                                    "name":"Alice in Wonderland"
                            }
                        ]
                    }

            ]
        }  
]}