JsonObjectのプロパティを繰り返し処理する。

Gson]1 を使って、大きなラッピングを施した JsonObject を繰り返し処理したいと思います。私の最終的な目的は、内側の "unterfeld" オブジェクトに存在するすべての3桁の code 整数の ArrayList を取得することですが、これは外側のオブジェクト'のプロパティを繰り返し処理することができれば問題ないでしょう。

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

何かいい方法はないでしょうか?

ソリューション

一番外側の JsonObject のメンバーに対して反復処理を行うには、 entrySet を使用します。

JsonObject object;
ArrayList codes = new ArrayList();
for (Map.Entry entry : object.entrySet()) {
    JsonArray array = entry.getValue().getAsJsonObject().getAsJsonArray("unterfeld");
    for (JsonElement codeHolder : array) {
        codes.add(codeHolder.getAsJsonObject().getAsJsonPrimitive("code").getAsInt());
    }
}
解説 (5)