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

+1

'JSONObject'のインポートは何ですか? – 8bitjunkie

+0

@ 8bitjunkie、それはorg.jsonです:json – chuckskull

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?私は**擬似コード**を見たことがありますか? –

+0

おそらく彼らはjsonオブジェクトではなくjsonオブジェクトについて質問しているからです。 – PixMach

+0

@PixMach OPが提供するStringはJSON配列です。それは '['で始まり ']で終わります。 –