JSONPath 语法速查:在线查询表达式示例与常见坑
JSONPath 是提取 JSON 字段的查询语言,接口调试、日志分析、测试断言都离不开。下面是常用操作符速查表与可直接套用的示例。
操作符速查表
| 语法 | 含义 | 示例 | 结果 |
|---|---|---|---|
$ | 根节点 | $.name | 根对象的 name |
. | 子节点 | $.store.book | book 数组 |
.. | 递归下降 | $..price | 所有层级的 price |
[*] | 数组全部 | $.store.book[*] | 所有书 |
[0] | 数组下标 | $.book[0] | 第一本书 |
[0:2] | 切片 | $.book[0:2] | 前两本 |
?() | 过滤 | $.book[?(@.price<10)] | 价格小于 10 的书 |
@ | 当前节点 | 配合 ?() | 过滤表达式内使用 |
['a','b'] | 多字段 | $['name','age'] | 两个字段 |
完整示例
{
"store": {
"book": [
{"title": "A", "price": 8.95, "tags": ["tech"]},
{"title": "B", "price": 12.99, "tags": ["novel"]}
],
"bicycle": {"color": "red", "price": 399}
}
}
$.store.book[*].title → ["A", "B"] $..price → [8.95, 12.99, 399] $.store.book[?(@.price > 10)].title → ["B"] $.store.bicycle.color → "red"
三个常见坑
- 根节点必须写
$:很多实现里省略$.直接写字段会查不到 - 过滤表达式语法因实现而异:部分库用
[?(@.x==1)],部分用[?(@.x == 1)],空格敏感 - 递归下降
..性能:大 JSON 里滥用$..*会明显变慢,尽量写全路径
💡 在 JSON 格式化工具 的「树形」视图里,可以直接试跑 JSONPath 表达式并高亮命中节点,边写边验证。