Java解析json数据

本文详细介绍了如何在Java中利用Jackson库解析包含地区信息的JSON字符串,展示了如何初始化JsonNode对象并遍历获取属性值的过程。
摘要由CSDN通过智能技术生成

功能说明:

        本文介绍了使用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、输出结果如下所示

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值