2014-06-23 9 views
19

Próbuję iterować nad obiektem json za pomocą json simple. Widziałem odpowiedzi, gdzie można zrobić getJSONObject („dziecko”) zIteracja poprzez JSONObject z korzenia w jsonie prostym

{ "child": { "something": "value", "something2": "value" } } 

ale co jeśli po prostu mieć coś

{ 
"k1":"v1", 
"k2":"v2", 
"k3":"v3" 
} 

i chcesz iteracyjne nad tym obiekcie JSON. To:

Iterator iter = jObj.keys(); 

rzuca: nie może odnaleźć symbol symbol: klucze() metoda lokalizacja: Klasa org.json.simple.JSONObject

Odpowiedz

31

Zakładając, że obiekt JSON jest zapisany w pliku „simple.json ”można iteracyjne nad par atrybut-wartość w następujący sposób:

JSONParser parser = new JSONParser(); 

Object obj = parser.parse(new FileReader("simple.json")); 

JSONObject jsonObject = (JSONObject) obj; 

for(Iterator iterator = jsonObject.keySet().iterator(); iterator.hasNext();) { 
    String key = (String) iterator.next(); 
    System.out.println(jsonObject.get(key)); 
} 
+0

Dzięki rozwiązałeś problem! Nie wiem, dlaczego zostałem zaaprobowany na to pytanie. – PixMach

+0

Spędziłem większość mojego poranka próbując znaleźć rozwiązanie, aby dynamicznie uzyskać dostęp do obiektów json. Dziękuję za to! – canadiancreed

+2

Mam błąd nie może rozwiązać '.keyset()' – hadi

4

można zrobić tak

String jsonstring = "{ \"child\": { \"something\": \"value\", \"something2\": \"value\" } }"; 
JSONObject resobj = new JSONObject(jsonstring); 
Iterator<?> keys = resobj.keys(); 
while(keys.hasNext()) { 
    String key = (String)keys.next(); 
    if (resobj.get(key) instanceof JSONObject) { 
     JSONObject xx = new JSONObject(resobj.get(key).toString()); 
     Log.d("res1",xx.getString("something")); 
     Log.d("res2",xx.getString("something2")); 
    } 
}