2012-04-15 38 views
35

Me gustaría iterar a través del envoltorio grande JsonObject con Gson. Mi objetivo final es obtener un ArrayList de todos los enteros existentes code de tres dígitos en los objetos internos "unterfeld", pero eso no será un problema una vez que pueda recorrer las propiedades del objeto externo.Iterar sobre las propiedades de 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 
    } 
} 

¿Hay alguna forma ordenada de hacerlo?

+0

Pregunta bien planteada, gracias –

Respuesta

66

Puede usar entrySet para iterar sobre los miembros del JsonObject más externo.

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

Muchas gracias en primer lugar. Probablemente es mi falta de comprensión del objeto Map, pero me sale un error: Excepción en el hilo "principal" java.lang.Error: Problema de compilación sin resolver: El método getAsJsonArray (String) no está definido para el tipo Map.Entry dotwin

+0

Me perdí una llamada a 'getValue' para extraer' JsonElement' de 'Map.Entry'. –

+1

impresionante, funciona ahora. Gracias. – dotwin