Java如何遍历嵌套JSON数组:全面指南与代码示例
在Java开发中,处理JSON数据是非常常见的任务,尤其是当遇到嵌套的JSON数组时,如何高效遍历这些结构成为许多开发者面临的挑战,本文将详细介绍在Java中遍历嵌套JSON数组的多种方法,包括使用原生库、第三方库以及最佳实践。
JSON与嵌套JSON数组概述
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,嵌套JSON数组指的是数组中包含其他数组或对象的结构,
{
"name": "公司部门",
"departments": [
{
"name": "技术部",
"employees": [
{"id": 1, "name": "张三"},
{"id": 2, "name": "李四"}
]
},
{
"name": "市场部",
"employees": [
{"id": 3, "name": "王五"},
{"id": 4, "name": "赵六"}
]
}
]
}
使用原生库遍历嵌套JSON数组
使用org.json库
我们需要添加org.json库的依赖(Maven):
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20231013</version>
</dependency>
遍历嵌套JSON数组的示例代码:
import org.json.JSONArray;
import org.json.JSONObject;
public class NestedJsonTraversal {
public static void main(String[] args) {
String jsonString = "{\"name\":\"公司部门\",\"departments\":[{\"name\":\"技术部\",\"employees\":[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]},{\"name\":\"市场部\",\"employees\":[{\"id\":3,\"name\":\"王五\"},{\"id\":4,\"name\":\"赵六\"}]}]}";
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray departments = jsonObject.getJSONArray("departments");
for (int i = 0; i < departments.length(); i++) {
JSONObject department = departments.getJSONObject(i);
System.out.println("部门: " + department.getString("name"));
JSONArray employees = department.getJSONArray("employees");
for (int j = 0; j < employees.length(); j++) {
JSONObject employee = employees.getJSONObject(j);
System.out.println(" 员工ID: " + employee.getInt("id") +
", 姓名: " + employee.getString("name"));
}
}
}
}
使用javax.json(JSON-P)Java API for JSON Processing
添加依赖:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
</dependency>
示例代码:
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
public class JsonpNestedTraversal {
public static void main(String[] args) {
String jsonString = "{\"name\":\"公司部门\",\"departments\":[{\"name\":\"技术部\",\"employees\":[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]},{\"name\":\"市场部\",\"employees\":[{\"id\":3,\"name\":\"王五\"},{\"id\":4,\"name\":\"赵六\"}]}]}";
JsonReader reader = Json.createReader(new StringReader(jsonString));
JsonObject jsonObject = reader.readObject();
JsonArray departments = jsonObject.getJsonArray("departments");
for (int i = 0; i < departments.size(); i++) {
JsonObject department = departments.getJsonObject(i);
System.out.println("部门: " + department.getString("name"));
JsonArray employees = department.getJsonArray("employees");
for (int j = 0; j < employees.size(); j++) {
JsonObject employee = employees.getJsonObject(j);
System.out.println(" 员工ID: " + employee.getInt("id") +
", 姓名: " + employee.getString("name"));
}
}
reader.close();
}
}
使用第三方库遍历嵌套JSON数组
使用Gson库
添加依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
示例代码:
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonNestedTraversal {
public static void main(String[] args) {
String jsonString = "{\"name\":\"公司部门\",\"departments\":[{\"name\":\"技术部\",\"employees\":[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]},{\"name\":\"市场部\",\"employees\":[{\"id\":3,\"name\":\"王五\"},{\"id\":4,\"name\":\"赵六\"}]}]}";
JsonElement jsonElement = JsonParser.parseString(jsonString);
JsonObject jsonObject = jsonElement.getAsJsonObject();
JsonArray departments = jsonObject.getAsJsonArray("departments");
for (JsonElement departmentElement : departments) {
JsonObject department = departmentElement.getAsJsonObject();
System.out.println("部门: " + department.get("name").getAsString());
JsonArray employees = department.getAsJsonArray("employees");
for (JsonElement employeeElement : employees) {
JsonObject employee = employeeElement.getAsJsonObject();
System.out.println(" 员工ID: " + employee.get("id").getAsInt() +
", 姓名: " + employee.get("name").getAsString());
}
}
}
}
使用Jackson库
添加依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
示例代码:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JacksonNestedTraversal {
public static void main(String[] args) throws IOException {
String jsonString = "{\"name\":\"公司部门\",\"departments\":[{\"name\":\"技术部\",\"employees\":[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]},{\"name\":\"市场部\",\"employees\":[{\"id\":3,\"name\":\"王五\"},{\"id\":4,\"name\":\"赵六\"}]}]}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonString);
JsonNode departmentsNode = rootNode.get("departments");
for (JsonNode departmentNode : departmentsNode) {
System.out.println("部门: " + departmentNode.get("name").asText());
JsonNode employeesNode = departmentNode.get("employees");
for (JsonNode employeeNode : employeesNode) {
System.out.println(" 员工ID: " + employeeNode.get("id").asInt() +
", 姓名: " + employeeNode.get("name").asText());
}
}
}
}
递归方法处理深度嵌套JSON
对于深度嵌套的JSON结构,递归方法更为适用,以下是一个使用Gson的递归示例:
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
public class RecursiveJsonTraversal {
public static void main(String[] args) {
String jsonString = "{\"name\":\"公司部门\",\"departments\":[{\"name\":\"技术部\",\"employees\":[{\"id\":1,\"name\":\"张三\",\"projects\":[{\"name\":\"项目A\"},{\"name\":\"项目B\"}]},{\"id\":2,\"name\":\"李四\"}]},{\"name\":\"市场部\",\"employees\":[{\"id\":3,\"name\":\"王五\"},{\"id\":4,\"name\":\"赵六\"}]}]}";
JsonElement jsonElement = JsonParser.parseString(jsonString);
traverseJson(jsonElement, 0);
}
public static void traverseJson(JsonElement element, int level) {
if (element.isJsonArray()) {
JsonArray array = element.getAsJsonArray();
for (JsonElement child : array) {
traverseJson(child, level + 1);
}
} else if (element.isJsonObject()) {
JsonObject obj = element.getAsJsonObject();
for (String key : obj.keySet()) {
JsonElement value = obj.get(key);
if (!value.isJsonArray() && !value.isJsonObject()) {
System.out.println(" ".repeat(level) + key + ": " + value.getAsString());
} else {
System.out.println(" ".repeat(level) + key + ":");
traverseJson(value, level + 1);
}
}
}
}
}
最佳实践与注意事项
- 选择合适的库:根据项目需求选择JSON处理库,Jackson和Gson功能强大且性能较好,适合



还没有评论,来说两句吧...