足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
足球直播
足球直播
搜狗输入法
搜狗输入法
快连
快连
快连
快连下载
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
搜狗输入法
搜狗输入法
quickq下载
quickq官网
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功能强大且性能较好,适合



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