JSON Path 详解:如何像 XPath 一样精准提取 JSON 节点

2026-02-26

接口返回深层嵌套 JSON,你只想拿 orders[0].items[2].sku。手写 optional chaining 可以,但配置化提取、测试断言、日志规则更适合 JSONPath 表达式。

基础语法

$ 表示根;.name 取属性;[0] 取数组下标;[*] 所有元素;..key 递归搜索 key。

RFC 9535 标准化了 JSONPath;各库实现细节略有差异,以文档为准。

// : { "store": { "book": [ { "title": "A" }, { "title": "B" } ] } }
// $.store.book[*].title    ["A", "B"]

过滤器表达式

[?(@.price < 10)] 筛选数组元素;@ 指当前节点。

适合配置平台「按条件抽字段」,避免写死 index。

常见工具

JavaScript:jsonpath-plus、JSONPath-Plus;Python:jsonpath-ng。

jq 使用类似路径语法:.store.book[].title,在命令行极常用。

和 XPath 的类比

XPath 面向 XML 树;JSONPath 面向 JSON 的值结构——没有属性与文本节点之分,语法更简单。

JSON 键有序(对象插入序),但 JSONPath 通常按名称匹配,不保证顺序语义。

实践建议

生产环境优先固定路径 + schema 校验;JSONPath 适合运维规则、测试、可配置抽取。

复杂查询仍可能在服务端 SQL/NoSQL 完成,别把 JSONPath 当通用查询语言。