2010-12-10 16 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