2012-02-09 7 views
0

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

{ 
    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" 
      } 
     } 
    } 
} 

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

+0

PS: Я бы предпочел не использовать JSONObject и т. Д .; если возможно, держать в GSON. – krslynx

ответ

1

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

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