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); // 输出:品牌名称
}
}
JsonNode获取json指定key对应value值
qingcyb2026-03-12 12:42
相关推荐
?? Daisy4 小时前
Claude Code 接入 GPT:settings.json 两种配置方法(2026-10)小静AI工程实验室7 小时前
Python 爬虫解析 JSON-LD:多块 script、@graph 与坏数据的 9 个边界goehou1 天前
LLM 结构化输出全解:从 Prompt 约束到 Schema 硬保证,三层实现怎么选独立开发者阿乐1 天前
结构化数据 JSON-LD 实战:让 AI 读懂你的网页liangshanbo12153 天前
高级前端面试题:package.json 常见字段梦帮科技3 天前
【3.0修订版】创世与节点工程:genesis.json 与 node.toml 解剖weixin_440730504 天前
内置函数、json文本、pickle二进制念越4 天前
接口自动化测试从入门到实战:接口用例设计、Requests、Pytest、YAML、JSON Schema 与 Allure 报告福兮说5 天前
前后端算的 MD5、SHA-256 对不上?编码、换行、BOM、HMAC、JSON 顺序,八个原因逐个实测网络毒刘6 天前
MCP 从 0 接入 Cursor:mcp.json 安装配置到最小调用与常见报错