2013-07-08 148 views
0

我想解析與GSON的JSON,我想我得到它的竅門。我有的問題是它似乎停止解析後的對象名稱。GSON只解析對象名

public static void main(String[] args) throws Exception { 
    Gson gson=new Gson(); 
    String json = "{\"k1\":\"v1\",\"k2\":\"v2\"}"; 
    Map<String,String> map=new HashMap<String,String>(); 
    map=(Map<String,String>) gson.fromJson(json, map.getClass()); 
    System.out.println(map.keySet()); 
} 

正常工作,輸出:

[K1,K2]

而且我可以使用這些密鑰來獲取值細而這正是我想做的事情。

如果我使用相同的代碼與此JSON對象從json.org所

{ 
    "glossary": { 
     "title": "example glossary", 
     "GlossDiv": { 
      "title": "S", 
      "GlossList": { 
       "GlossEntry": { 
        "ID": "SGML", 
        "SortAs": "SGML", 
        "GlossTerm": "Standard Generalized Markup Language", 
        "Acronym": "SGML", 
        "Abbrev": "ISO 8879:1986", 
        "GlossDef": { 
         "para": "A meta-markup language, used to create markup languages such as DocBook.", 
         "GlossSeeAlso": ["GML", "XML"] 
        }, 
        "GlossSee": "markup" 
       } 
      } 
     } 
    } 
} 

我得到的唯一的輸出是

[名詞解釋]

我覺得有一些明顯的我我錯過了,有人能幫助我指出正確的方向嗎?

謝謝。

+1

第二JSON對象是相當複雜的。你期待什麼輸出? – kuporific

+0

你的第二個對象只有一個鍵('glossary')和一個該鍵的值(該對象包含所有其他的東西)。 –

+0

我想要做的是在不知道密鑰名稱的情況下獲取值。因此,使用上面的第二個json示例,我希望能夠做到這樣*僞代碼* 我想我可以按每個級別分解該JSON對象,程序化地顯示標題的值,然後ID等一些循環。 (int i = 0; i user2229544

回答

1

JSON對象(包含"glossary")比Map更復雜。 JSON對象可能被轉換成Java Map<String, String>的一個例子是:

 
{"key1": "value1", "key2": "value2", "key3": "value3"} 

然而,在本例中JSON對象,有一個字符串鍵,其值爲JSON對象,而不是一個String,這不轉換爲Map<String, String>

 
{"key": {"anotherKey": "some value"}} 

有從GSON主頁here一個例子。要正確反序列化您的示例,您將不得不使用JsonParserGson的組合。例如,

String jsonObject = "your example"; 
JsonParser parser = new JsonParser(); 
JsonObject obj = parser.parse(jsonObject).getAsJsonObject(); 
JsonObject glossary = obj.get("glossary"); 

等...

+0

哇,謝謝!這正是我所尋找的,我只是不知道該怎麼去問。非常感謝你! – user2229544