功能说明:
本文介绍了使用Java中的Jackson库解析JSON数据的基本方法。通过一个包含地区信息的JSON字符串的例子,演示了如何使用ObjectMapper初始化JsonNode对象,并遍历JSON结构。
代码的作用是解析包含地区信息的 JSON 字符串。每个地区信息包括地区ID("areaId")、地区节点数目("areaNodeNum")以及地区节点详细信息("areaNodeInfo")。每个节点信息包括节点ID("nodeId")、DNSSEC状态("dnssecStatus")、Root Copy状态("rootCopyStatus")和Root Copy数据源("rootCopyDataSource")。
1、JSON内容如下所示
2、使用Java解析该json字符串,并获取每个属性的值。引用的maven依赖及Java代码如下所示。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
package org.example;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
// JSON 字符串,包含一组地区信息
String json = "[{\"areaId\": \"33\", \"areaNodeNum\": \"2\", \"areaNodeInfo\": " +
"[{\"nodeId\": \"202401161\", \"dnssecStatus\": \"1\", \"rootCopyStatus\": \"1\", \"rootCopyDataSource\": \"1\"}, " +
"{\"nodeId\": \"202401162\", \"dnssecStatus\": \"1\", \"rootCopyStatus\": \"1\", \"rootCopyDataSource\": \"1\"}]}, " +
"{\"areaId\": \"34\", \"areaNodeNum\": \"2\", \"areaNodeInfo\": " +
"[{\"nodeId\": \"202401163\", \"dnssecStatus\": \"0\", \"rootCopyStatus\": \"0\", \"rootCopyDataSource\": \"1\"}, " +
"{\"nodeId\": \"202401164\", \"dnssecStatus\": \"0\", \"rootCopyStatus\": \"0\", \"rootCopyDataSource\": \"1\"}]}]";
try {
// 初始化 ObjectMapper,用于解析 JSON
ObjectMapper objectMapper = new ObjectMapper();
// 将 JSON 字符串解析为 JsonNode
JsonNode jsonNode = objectMapper.readTree(json);
// 遍历jsonNode
for (JsonNode node : jsonNode) {
// 获取areaId
JsonNode areaId = node.get("areaId");
LOGGER.error("areaId:" + areaId);
/**
* 获取areaNodeInfo数组
* 注意:如果想要获取的二级节点数据(nodeId字段)是数组中的,需要先获取数组,再遍历数组获取。不能通过node.get("areaNodeInfo").get("nodeId")获取
*/
JsonNode areaNodeInfo = node.get("areaNodeInfo");
// 检查areaNodeInfo是否存在且为数组
if (areaNodeInfo != null && areaNodeInfo.isArray()) {
// 遍历数组中每个nodeId
for (JsonNode infoNode : areaNodeInfo) {
// 获取nodeId
JsonNode nodeId = infoNode.get("nodeId");
LOGGER.error("nodeId:" + nodeId);
}
}
}
} catch (Exception e) {
// 异常处理
e.printStackTrace();
}
}
}
3、输出结果如下所示