2012-04-15 11 views
35

Ich würde gerne durch die große Verpackung JsonObject mit Gson iterieren. Mein endgültiges Ziel ist es, eine ArrayList aller vorhandenen dreistelligen code Ganzzahlen in den inneren "unterfeld" Objekte zu bekommen, aber das wird kein Problem sein, sobald ich durch die Eigenschaften des äußeren Objekts iterieren kann.Iterate über JsonObject Eigenschaften

{ 
    "something1": { 
    "bezeichnung": "something1", 
    "unterfeld": [ 
     { 
     "bezeichnung": "bla1", 
     "unterregionen": [ 
     ], 
     "code": 111 
     }, 
     { 
     "bezeichnung": "bla2", 
     "unterregionen": [ 
     ], 
     "code": 222 
     } 
    ], 
    "code": 3 
    }, 
    "something2": { 
    "bezeichnung": "something2", 
    "unterfeld": [ 
     { 
     "bezeichnung": "bla3", 
     "unterregionen": [ 
     ], 
     "code": 333 
     } 
    ], 
    "code": 6 
    }, 
    "something3": { 
    "bezeichnung": "something3", 
    "unterfeld": [ 
     { 
     "bezeichnung": "bla4", 
     "unterregionen": [ 
     ], 
     "code": 444 
     }, 
     { 
     "bezeichnung": "bla5", 
     "unterregionen": [ 
     ], 
     "code": 555 
     }, 
     { 
     "bezeichnung": "bla6", 
     "unterregionen": [ 
     ], 
     "code": 666 
     } 
    ], 
    "code": 9 
    } 
} 

Gibt es eine nette Möglichkeit, das zu tun?

+0

Gut gestellte Frage, danke –

Antwort

66

Sie können entrySet verwenden, um über die Elemente des äußersten JsonObject zu iterieren.

JsonObject object; 
ArrayList<Integer> codes = new ArrayList<Integer>(); 
for (Map.Entry<String,JsonElement> entry : object.entrySet()) { 
    JsonArray array = entry.getValue().getAsJsonObject().getAsJsonArray("unterfeld"); 
    for (JsonElement codeHolder : array) { 
     codes.add(codeHolder.getAsJsonObject().getAsJsonPrimitive("code").getAsInt()); 
    } 
} 
+1

Vielen Dank zuerst. Es ist wahrscheinlich mein Unverständnis des Map-Objekts, aber ich bekomme einen Fehler: Ausnahme im Thread "main" java.lang.Error: Ungelöste Kompilierung Problem: Die Methode getAsJsonArray (String) ist nicht definiert für den Typ Map.Entry dotwin

+0

Ich habe einen Aufruf von 'getValue' verpasst, um' JsonElement' aus 'Map.Entry' zu ziehen. –

+1

genial, es funktioniert jetzt. Vielen Dank. . ' mit JsonArray array = entry.getValue(); – dotwin