2010-12-10 33 views
31

嘗試使用Android中映射的最小值進行解析時遇到問題。僅使用字符串和值解析JSON對象

有一些樣本JSON格式的詳細信息,例如:

[{id:"1", name:"sql"},{id:"2",name:"android"},{id:"3",name:"mvc"}] 

這一點,例如最常見的使用和易於使用的只是使用getString("id")getValue("name")

但我該如何解析才能使用此JSON格式進行映射,只使用字符串和值的最小格式來使用循環的java地圖集合。而且因爲字符串json總是與另一個不同。例如:

{"1":"sql", "2":"android", "3":"mvc"} 

感謝

回答

76

你需要得到所有鍵的列表,遍歷它們,並將它們添加到您的地圖如下圖所示的例子:

String s = "{menu:{\"1\":\"sql\", \"2\":\"android\", \"3\":\"mvc\"}}"; 
    JSONObject jObject = new JSONObject(s); 
    JSONObject menu = jObject.getJSONObject("menu"); 

    Map<String,String> map = new HashMap<String,String>(); 
    Iterator iter = menu.keys(); 
    while(iter.hasNext()){ 
     String key = (String)iter.next(); 
     String value = menu.getString(key); 
     map.put(key,value); 
    } 
+0

簡單但非常高效,謝謝。 – mass 2013-07-27 03:49:19

+1

「JSONObject」的導入是什麼? – 8bitjunkie 2016-11-04 12:44:35

+0

@ 8bitjunkie,這是org.json:json – chuckskull 2017-05-31 20:29:11

9

僞代碼示例如下:

JSONArray jsonArray = "[{id:\"1\", name:\"sql\"},{id:\"2\",name:\"android\"},{id:\"3\",name:\"mvc\"}]"; 
JSON newJson = new JSON(); 

for (each json in jsonArray) { 
    String id = json.get("id"); 
    String name = json.get("name"); 

    newJson.put(id, name); 
} 

return newJson; 
+1

爲什麼downvote?你不能看到我說**僞代碼**? – 2012-05-23 09:22:31

+0

可能是因爲他們詢問有關json對象而不是json數組。 – PixMach 2014-06-23 17:29:02

+0

@PixMach OP提供的字符串是JSON數組。它以'['開始並以']'結尾。 – 2014-06-23 18:07:59