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); // 输出:品牌名称
    }
}
相关推荐
Kiyra1 小时前
Query Rewrite 不是越智能越好:RAG 检索的精确词保护与动态召回
redis·websocket·junit·单元测试·json
Msshu1232 小时前
XSP25全协议 100W PD快充诱骗芯片_串口读电压电流信息
hive·云计算·json·database·memcached
水火既济__2 小时前
hive中加载json数据建表(大规模)
hive·hadoop·json
朝新_3 小时前
【LangChain】输出解析器 Str/Pydantic/JSON 解析器用法详解 告别模型乱输出
microsoft·langchain·json
Kiyra1 天前
LLM 的 JSON 不靠谱:结构化输出的重试与修复实战
开发语言·python·json
易生一世1 天前
JWT详解
json·证书·jwt·token·ai skills
原来是猿2 天前
JSON 序列化与反序列化 —— 用 Jsoncpp 打造自己的网络协议
网络·网络协议·json
愈努力俞幸运3 天前
json schema
json
神所夸赞的夏天3 天前
如何获取多层json数据,存成dictionary,并取最大最小值
java·前端·json
web3.08889994 天前
天猫API接口详解:商品详情与关键词搜索商品指南及代码示例
python·json