GSON: десериализация универсального объекта - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь десериализовать некоторые JSON из Википедии, используя библиотеку GSON. Как правило, я создаю каждый объект в Java как он есть в JSON, например:

{
    query: {
        pages: {
            page: {
                pageid: 168079,
                ns: 0,
                title: "2010 FIFA World Cup"
            }
        }
    }
}

Это позволит мне десериализовать, используя следующий код Java:

class PageIdResponseGson
{
    private QueryResults query;

    public static class QueryResults
    {
        private PageResults pages;

        public PageResults getPages() {
            return pages;
        }
    }

    public static class PageResults
    {
        private PageResult page;

        public PageResult getPage() {
            return page;
        }
    }

    public static class PageResult
    {
        private int pageid;
        private int ns;
        private String title;

        public int getNs() {
            return ns;
        }

        public int getPageid() {
            return pageid;
        }

        public String getTitle() {
            return title;
        }
    }

    public QueryResults getQuery() {
        return query;
    }
}

Тем не менее, JSON из Википедии использует идентификатор страницы в качестве имени объекта, что означает, что я не могу использовать этот подход.

{
    query: {
        pages: {
            168079: {
                pageid: 168079,
                ns: 0,
                title: "2010 FIFA World Cup"
            }
        }
    }
}

Есть ли способ, которым я могу использовать какую-то универсальную оболочку для обработки этих динамических имен объектов?

1 Ответ

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

У вас есть несколько вариантов здесь:

  1. Вы используете Hashmaps -> Все, что может быть ключом в хэш-карте, и GSON будет хорошо.
  2. Вы реализуете свой собственный TypeAdapterи TypeAdapterFactory для обработки таких случаев, и когда вы встречаете поле, число которого не существует в вашем целевом классе, тогда вы знаете, что у вас есть идентификатор страницы, и он должен быть переназначен на вашем элементе PageResults.page.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...