JsonNode获取json指定key对应value值

复制代码
import com.fasterxml.jackson.databind.JsonNode;
import com.gac.pbi.product.util.JacksonUtil;

import java.util.Optional;

/**
 *
 * {
 *  "clsAttrs": [
 *             {
 *        "productionCatlogLevel": {
 *           "name": "品牌名称",
 *           "brandInternationalName": "品牌别名",
 *           "states": {
 *              "code": "停用",
 *              "cnName": "停用",
 *              "enName": "disable",
 *              "alias": "Disable"
 *                }
 *            }
 *        }
 *  ]
 * }
 *  JsonNode获取json指定key对应value值
 *
 */
public class JsonNodeTest {
    public static void  main(String [] args) {
        String json = "{\"clsAttrs\":[{\"productionCatlogLevel\":{\"name\":\"品牌名称\",\"brandInternationalName\":\"品牌别名\",\"states\":{\"code\":\"停用\",\"cnName\":\"停用\",\"enName\":\"disable\",\"alias\":\"Disable\"}}}]}\n";
        // 1. 解析JSON为JsonNode,包装成Optional
        JsonNode rootNode = JacksonUtil.toJsonNode(json);
        Optional<JsonNode> rootOptional = Optional.ofNullable(rootNode);
        // 2. 链式调用获取name值,全程无空指针
        String name = rootOptional
                // 第一步:获取clsAttrs节点(空则返回空Optional)
                .map(node -> node.get("clsAttrs"))
                // 第二步:判断clsAttrs不是空数组,再取第一个元素
                .filter(clsAttrsNode -> !clsAttrsNode.isEmpty())
                .map(clsAttrsNode -> clsAttrsNode.get(0))
                // 第三步:获取productionCatlogLevel节点
                .map(itemNode -> itemNode.get("productionCatlogLevel"))
                // 第四步:获取name节点
                .map(prodNode -> prodNode.get("name"))
                // 第五步:转为字符串(空则返回默认值"")
                .map(JsonNode::asText)
                // 空值时的默认值
                .orElse("");
        System.out.println("获取到的name:" + name); // 输出:品牌名称
    }
}
相关推荐
譕痕1 天前
notepad++安装插件 可视化展示 json串内容
json·intellij-idea
databook1 天前
DuckDB + SQL 高效分析 JSON 数据
数据分析·json·nosql
数据狐(Datafox)2 天前
1688商品列表API接口解析(附 JSON 样例)
java·开发语言·数据库·爬虫·json
j7~3 天前
【Linux网络加餐】(篇六)网络版计算器(上):模板方法模式、序列化与 JSON
linux·c++·json·序列化·反序列化·网络版计算机
梦帮科技3 天前
Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层
css·数据结构·链表·正则表达式·node.js·json·html5
蓝悦无人机4 天前
LangChain v1.0 系列教程——第2章 工具系统
langchain·json·装饰器模式·pydantic
Lyra_Infra4 天前
从一段错误 JSON 说起:Policy、Role 与 IAM
后端·json·aigc
羑悻的小杀马特4 天前
数据织网者:Jsoncpp库深度解析——从C++原生JSON处理到工程级数据交互实战全攻略
c++·json·交互·jsoncpp·原生库
代码什么用4 天前
JSON一文速通
java·json
小小测试开发5 天前
LLM 结构化输出测试:Schema 契约 + 故障注入,让工具调用的 JSON 不再靠重试赌运气
人工智能·json