2013-05-13 161 views
1

我是初學者Java和Gson用戶,並且能夠將其應用於我的需求。我現在有我需要解析爲一個微調一些JSON數據如下:使用Gson解析動態JSON數據

{ 
    "lang":[ 
     "arabic", 
     "bengali", 
     "dutch-utf8", 
     "eng_root", 
     "english", 
     "english-utf8", 
     ... 
    ], 
    "themes":{ 
     "blue":{ 
      "chinese_ibm500":1, 
      "spanish":1, 
      "bengali":1, 
      "japanese":1, 
      "english":1, 
      "russian":1, 
      "french-utf8":1, 
      "eng_root":1, 
      "arabic":1, 
      "spanish-utf8":1, 
      "portuguese":1, 
      ... 
     }, 
     "green":{ 
      "eng_root":1, 
      "engmonsoon":1, 
      "english":1 
      ... 
     }, 
     "red":{ 
      "chinese_ibm500":1, 
      "spanish":1, 
      "bengali":1, 
      ... 
     } 
    } 
} 
從這個JSON

所以,我需要兩兩件事:

1)浪下的數組是動態的,作爲其語言安裝在服務器上。我怎麼能得到所有的條目?

我有一個類,但即時通訊堅持以我應該做如下理解我1 I也許能算出這個一出來後返回郎

public class ListData { 

    private List<Language> lang; 

    public List<Language> getLang { 
     return lang; 
    } 

    public static class Language { 
     ??? 
    } 
} 

2後)。在主題下的顏色可以是或多或少的{紫色,橙色,無論}。我只需要這些主題的列表,就我而言,我不需要知道每個主題的語言。

感覺這個問題正在變成一本書。我已經廣泛地搜索過,並且討厭提問,但我很難過。提前致謝。

+0

你的代碼使用Gson在哪裏? – 2013-05-13 20:45:15

+0

當然,您可以將它解析爲JSON對象,而不是Gson的東西。 – 2013-05-13 21:28:46

回答

5

1)爲了得到"lang"陣列,只需修改

private List<Language> lang; 

private List<String> lang; 

由於內部"lang"數組中的元素都是字符串,你不需要任何類Language到存儲這些值,它們將被正確解析爲字符串。並不要緊多少字符串數組包含...


2)爲了解析"themes",你要注意,這不是一個數組[ ],但對象{ },這樣你就需要與一些對象來解析它,這裏最適合類是Map這樣的:

private Map<String, Object> themes; 

注:如你所說,你不需要數據"blue"下,"green",等等......你可以只是Object作爲地圖中的值類型,否則你需要一些類...

使用Map這裏可以讓你在你的JSON響應的主題任意號碼。


所以摘要,你只需要像類:

public class ListData { 

    private List<String> lang; 
    private Map<String, Object> themes; 

    //getters & setters 
} 

,並與解析您的JSON:

Gson gson = new Gson(); 
ListData data = gson.fromJson(yourJsonString, ListData.class); 

LANGS將下表:

data.getLang(); 

和你主題的名單將是下:

data.getThemes().keySet(); 

我建議你看一看Gson documentation。它非常簡短明瞭,你會更好地理解一切......

+0

非常感謝。我其實之前嘗試過,但我得到期待數組的錯誤,但是是對象或排序,但我只創建了lang而不是ListData中的主題。實際上檢查我的JSON響應我在lang之前獲得主題,並且當我使用地圖編輯我的ListData時,它現在可以工作。所以我假設GSON不知道如何解析主題?令人難以置信... – 2013-05-14 11:57:34

+0

作爲一個小問題,可以說有lang,主題和字體。如果我只想朗和主題將上述答案本身工作,或者我將不得不創建一個對象來處理字體,只是從來沒有使用它? – 2013-05-14 12:01:31

+0

如果除了'lang'和'themes',你的JSON中有更多的對象並不重要... Gson只是處理你的類並將類屬性的名稱與JSON元素名稱進行比較......如果一個類屬性與JSON中找到的元素的名稱相匹配,它會嘗試將JSON元素的內容放入類屬性中......如果JSON中有某個元素與任何類屬性名稱不匹配,那麼Gson會忽略元件... – MikO 2013-05-14 12:10:26