Iterate over JsonObject properties

2020-01-28 05:56发布

问题:

I would like to iterate through the big wrapping JsonObject with Gson. My final aim is to get an ArrayList of all existing three digit code integers in the inner "unterfeld" objects, but that will be no problem once I can iterate through the outer object's properties.

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

Is there any neat way to do that?

回答1:

You can use entrySet to iterate over the members of the outermost 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());
    }
}