2012-02-09 80 views
0

我試圖使用GSON庫對維基百科中的一些JSON進行反序列化。通常情況下,我會創造在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使用page-id作爲對象名稱,這意味着我不能採用這種方法。

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

有沒有一種方法可以使用某種通用包裝來處理這些動態對象名稱?

+0

PS:我寧可不使用JSONObject等;如果可能的話繼續使用GSON。 – krslynx 2012-02-09 15:58:16

回答

1

你這裏有幾個選擇:

  1. 您可以使用包含HashMap - >什麼都可以HashMap中的關鍵和GSON會做得很好。
  2. 你實現自己的TypeAdapter和TypeAdapterFactory來處理這種情況下,當你遇到一個字段是一個數字,不會在你的目標類存在,那麼你知道你有你的PAGEID,它應該您PageResults.page部件被重新映射。