2012-04-15 2 views
35

Я хотел бы пройти через большую упаковку JsonObject с Gson. Моя конечная цель состоит в том, чтобы получить ArrayList всех существующих трехзначных чисел code во внутренних объектах "unterfeld", но это не будет проблемой, как только я смогу выполнить итерацию через свойства внешнего объекта.Итерация над свойствами 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 
    } 
} 

Есть ли какой-нибудь опрятный способ сделать это?

+0

Положительный вопрос, спасибо –

ответ

66

Вы можете использовать entrySet, чтобы перебирать членов внешнего сообщества 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

Большое спасибо в первую очередь. Вероятно, это мое отсутствие понимания объекта Map, но я получаю сообщение об ошибке: Исключение в потоке «main» java.lang.Error: проблема неразрешенной компиляции: Метод getAsJsonArray (String) не определен для типа Map.Entry dotwin

+0

Я пропустил вызов 'getValue', чтобы вытащить' JsonElement' из 'Map.Entry'. –

+1

удивительный, он работает сейчас. Благодарю. – dotwin

Смежные вопросы