JSONPath 在线查询工具
常用表达式(点击直接试)
📖 JSONPath 查询规则详解(本工具支持的完整语法)
一、路径片段
| 语法 | 名称 | 匹配规则 |
|---|---|---|
$ | 根 | 整个 JSON 文档(起点,必须写在最前面) |
.key 或 ['key'] | 子节点 | 取当前对象中键名为 key 的值;键不存在则该分支无结果。括号写法支持含空格、点、中文等特殊字符的键名,如 $['my key'] |
..key | 递归下降 | 从当前节点出发,逐层深入所有后代(含嵌套对象与数组元素),收集每一层上键名为 key 的值。例:$..author 找出文档中任意深度的所有 author |
..* 或 ..[...] | 递归 + 其他片段 | 递归后接续应用其他片段,如 $..book[0] 取任意深度上第一个 book |
.* 或 [*] | 通配符 | 当前节点是对象时取全部值;是数组时取全部元素(只展开一层,不递归) |
二、方括号片段(数组操作)
| 语法 | 名称 | 匹配规则 |
|---|---|---|
[0]、[2] | 下标 | 取数组第 N 个元素(从 0 开始) |
[-1]、[-2] | 负下标 | 从末尾倒数:[-1] 是最后一个元素,[-2] 是倒数第二个 |
[1:3] | 切片 | 取下标 [1, 3) 的元素(含头不含尾),即第 2、3 个元素 |
[:2] | 前缀切片 | 从头取到下标 2 之前,即前 2 个元素 |
[1:] | 后缀切片 | 从下标 1 取到末尾 |
[-2:] | 尾部切片 | 最后 2 个元素 |
[0,2] | 多选(union) | 同时取多个下标,结果按书写顺序排列 |
['a','b'] | 多键(union) | 同时取多个键名,如 $['name','age'] |
三、过滤表达式 [?(...)]
对当前数组逐元素(对象则逐值)求值,保留使表达式为真的元素。@ 代表"当前正在判断的元素"。
| 语法 | 匹配规则 |
|---|---|
[?(@.isbn)] | 存在判断:元素拥有 isbn 字段(值非 undefined)即命中。可再加否定:[?(!@.isbn)](本工具暂不支持 !,用 == null 变通) |
[?(@.price < 10)] | 数值比较:> < >= <=,两侧为数字才比较,否则不命中 |
[?(@.name == '张三')] | 相等比较:== !=,按值严格相等(字符串需带引号;数字直接写) |
[?(@.price >= 5 && @.price <= 20)] | 逻辑与:&& 两边都为真才命中 |
[?(@.type == 'a' || @.type == 'b')] | 逻辑或:|| 任一为真即命中 |
[?(@.author.name == 'Rees')] | 嵌套引用:@ 后可以继续点下去取嵌套字段 |
[?(@.tags[0] == 'x')] | 过滤内引用数组下标 |
括号可省略:[?@.price < 10] 与 [?(@.price < 10)] 等价。字符串用单引号或双引号均可。
四、组合规则
- 片段从左到右串行应用:每一步的输出集合作为下一步的输入集合,任一环节为空则整体无命中。
- 点写法与括号写法可混用:
$.store['book'][0].title合法。 - 过滤与切片可以叠加:
$.book[?(@.price < 10)][0]= 便宜的书中第一本。 - 递归片段后可接任意片段:
$..book[?(@.price < 10)]。
五、结果展示
- 命中多个结果时,按命中顺序逐个格式化输出,用
---分隔。 - 无命中时输出提示(不报错);表达式语法错误时在底部状态栏给出精确原因。
- 比较操作仅在数字之间进行;字符串比较仅支持
== / !=(不支持按字典序比大小)。
六、不支持(超出本工具范围)
- 脚本表达式
[(@.length-1)]、正则匹配=~、in/nin/subsetof等扩展算子。 - 过滤器内调用函数(
@.length、substring()等)。 - 需要以上能力时建议改用
jsonpath-plus等完整实现(本工具为零依赖安全子集,过滤器手写解析求值,不走eval)。
七、快速示例(基于左侧默认示例文档)
| 表达式 | 含义 |
|---|---|
$.store.book[*].author | 所有书的作者(4 个) |
$..author | 任意深度的作者(同上,但会找到文档各处) |
$.store.book[?(@.isbn)] | 有 ISBN 的书(2 本) |
$.store.book[?(@.price < 10)].title | 价格低于 10 的书名 |
$.store.book[?(@.category == 'fiction' && @.price > 10)].title | 虚构类且价格大于 10 的书名 |
$.store..price | store 下任意深度的所有价格(含书与自行车) |
$['store']['book'][0,2]['title'] | 第 1、3 本书的标题 |
JSONPath 在线查询工具 · 功能介绍
粘贴 JSON 并输入 JSONPath 表达式(如 $.store.book[?(@.price<10)].title),即时查看命中结果。支持点号与方括号写法、过滤器、切片、递归下降,页面附完整语法说明。查询在浏览器本地执行,数据不上传。
使用步骤
- 粘贴 JSON 文本
- 输入 JSONPath 表达式
- 实时查看命中结果
- 对照页面下方的语法速查表调试
相关工具
🔒 本工具所有计算均在浏览器本地完成,数据不会上传服务器,可离线使用。