Десериализация строк JSON с использованием GSON в Android - PullRequest
1 голос
/ 29 февраля 2012

Это может быть немного длинно, поэтому, пожалуйста, потерпите меня ..

Я работаю над проектом в 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 родительских объектов).Однако все их атрибуты отсутствуют, и дочернее дерево также отсутствует.

Я пробовал многочисленные настройки, включая удаление расширенного класса и помещение всех идентификатора и имени в соответствующие классы, но в результатевсе тот же.

Кто-нибудь может дать мне любой указатель, что, где я ошибся?

Спасибо большое!

1 Ответ

1 голос
/ 29 февраля 2012

Ваше несоответствие классов 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"
                            }
                        ]
                    }

            ]
        }  
]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...