语法速查
| 表达式 | 含义 | 示例 |
|---|---|---|
| $ | 根对象 | $ |
| .key | 子节点 | $.store.book |
| [n] | 数组索引 | $.books[0] |
| [*] | 通配符 | $.books[*].title |
| ..key | 递归 descent | $..price |
| [?()] | 过滤 | $.books[?(@.price<10)] |
使用场景
API调试:从复杂的API响应中快速提取需要的字段。
数据清洗:从嵌套JSON中批量提取特定数据。
配置查询:从大型配置文件中定位特定配置项。
提示:递归 descent(..)会搜索所有层级,非常适合在深层嵌套中查找字段。
JSONPath 与 XPath 对照
会 XPath 的同学可以快速迁移,两者思想一致:
| JSONPath | XPath | 含义 |
|---|---|---|
| $ | / | 根节点 |
| @ | . | 当前节点 |
| .name 或 ['name'] | /name | 子节点 |
| ..name | //name | 递归下钻所有层级 |
| [*] | /* | 所有子节点 |
| [?(@.price < 10)] | [price<10] | 过滤表达式 |
常见坑:负索引 [-1] 取最后元素不是所有实现都支持;过滤表达式里比较字符串要带引号;.. 深度搜索在大文档上性能较差,能定位层级就别递归。