📜  Java 循环通过 gson JsonElement - Java (1)

📅  最后修改于: 2023-12-03 15:16:00.510000             🧑  作者: Mango

Java 循环通过 Gson JsonElement

在 Java 中,使用 Gson 库可以将 JSON 数据转换成 Java 对象,也可以将 Java 对象转换成 JSON 数据。在将 JSON 数据转换成 Java 对象时,可以使用 JsonElement 类表示 JSON 中的任何对象(数组、对象、值等)。在本文中,我们将介绍如何循环遍历 JsonElement 中的数组和对象。

遍历 JsonElement 数组

假设我们有以下 JSON 数据:

{
  "fruits": [
    { "name": "apple", "color": "red" },
    { "name": "banana", "color": "yellow" },
    { "name": "orange", "color": "orange" }
  ]
}

我们可以将其解析为一个 JsonElement 对象:

String json = "{...}"; // JSON 数据
JsonElement jsonElement = new Gson().fromJson(json, JsonElement.class);

然后,我们可以获取名称为 "fruits" 的 JSON 数组,并使用 for 循环遍历其元素:

JsonArray jsonArray = jsonElement.getAsJsonObject().getAsJsonArray("fruits");
for (JsonElement element : jsonArray) {
  String name = element.getAsJsonObject().getAsJsonPrimitive("name").getAsString();
  String color = element.getAsJsonObject().getAsJsonPrimitive("color").getAsString();
  System.out.println(name + ": " + color);
}

上述代码中,我们使用 getAsJsonArray 方法获取 JSON 数组,然后使用 for 循环遍历其元素。在每次迭代中,我们使用 getAsJsonObject 方法将元素转换为 JsonObject 对象,然后使用 getAsJsonPrimitive 方法获取其中的属性值(即字符串)。

遍历 JsonElement 对象

假设我们有以下 JSON 数据:

{
  "person": {
    "name": "John",
    "age": 30,
    "address": {
      "city": "New York",
      "zip": 10001
    }
  }
}

我们可以将其解析为一个 JsonElement 对象,然后获取名称为 "person" 的 JSON 对象:

String json = "{...}"; // JSON 数据
JsonElement jsonElement = new Gson().fromJson(json, JsonElement.class);

JsonObject jsonObject = jsonElement.getAsJsonObject().getAsJsonObject("person");

使用 getAsJsonObject 方法获取 JSON 对象后,我们可以使用 for 循环遍历其属性:

for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
  String property = entry.getKey();
  JsonElement value = entry.getValue();
  
  if (value.isJsonPrimitive()) {
    System.out.println(property + ": " + value.getAsString());
  } else if (value.isJsonObject()) {
    System.out.println(property + ": {");
    for (Map.Entry<String, JsonElement> subEntry : value.getAsJsonObject().entrySet()) {
      String subProperty = subEntry.getKey();
      JsonElement subValue = subEntry.getValue();
      System.out.println("  " + subProperty + ": " + subValue.getAsString());
    }
    System.out.println("}");
  }
}

上述代码中,我们使用 entrySet 方法获取 JSON 对象的属性集合,然后使用 for 循环遍历其每个属性。对于每个属性,如果其值是 JSON 值(即 JsonPrimitive 对象),我们直接输出其字符串值;如果其值是 JSON 对象(即 JsonObject 对象),我们递归调用遍历 JsonElement 对象的方法。

结论

通过上述示例,我们可以看到如何使用 Java 进行循环遍历 Gson JsonElement 中的数组和对象。在遍历 JSON 对象时,需要注意其属性可能是 JSON 值或 JSON 对象,需要作不同处理。