2012-04-15 37 views
35

Chciałbym iterować przez duże opakowanie JsonObject z Gson. Moim ostatnim celem jest uzyskanie ArrayList wszystkich istniejących liczb całkowitych o liczbach całkowitych code w obiektach wewnętrznych "unterfeld", ale to nie będzie problemem, gdy będę mógł dokonać iteracji przez właściwości obiektu zewnętrznego.Powtórzenie właściwości JsonObject

{ 
    "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 
    } 
} 

Czy jest jakiś sposób na zrobienie tego?

+0

Dobrze zadane pytanie, dziękuję –

Odpowiedz

66

Możesz użyć entrySet do iteracji po elementach najbardziej zewnętrznego JsonObject.

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

Bardzo dziękuję. Jest to prawdopodobnie mój brak zrozumienia obiektu Map, ale pojawia się błąd: Wyjątek w wątku "main" java.lang.Error: Nierozwiązany problem kompilacji: Metoda getAsJsonArray (String) jest niezdefiniowana dla typu Map.Entry dotwin

+0

Brakowało mi połączenia z 'getValue', aby wyciągnąć' JsonElement' z 'Map.Entry'. –

+1

niesamowite, teraz działa. dzięki. – dotwin