使用方法
- 把 JSON 文档粘贴到“JSON 文档”中。可先用示例试用本工具。
- 在它下方的“JSONPath 查询”中输入查询,以 $ 开头。过滤器放在方括号中,例如 [[email protected] < 10]。
- 阅读“匹配数”,然后阅读“按顺序排列的匹配项”表:每一行给出一个匹配项的路径和值。
- 若消息指出了问题的位置,请检查查询中对应的字符,并修正括号、引号或点号。
查询如何选择节点
查询是 $ 之后的一串片段。子片段(如 .store 或 [0])选择每个到达的节点的子节点;后代片段(如 ..author)则先访问该节点及其所有后代,然后再进行选择。同一片段选中的节点按输入的顺序排列,数组总是按其顺序读取(RFC 9535,第2.5与2.5.2.2节)。
名称选择器只匹配对象中名称完全相同的成员,且只作用于对象。负索引从数组末尾计数,因此 -1是最后一项。切片如 [1:5:2] 同时给出起点、终点和步长;步长为0时不选中任何内容(第2.3.4.2节)。
过滤器、函数以及工具拒绝的内容
过滤器 [?...] 测试数组或对象的每个子项。比较使用 ==、!=、<、<=、> 和 >=;&&、|| 和 ! 组合测试,圆括号用于分组。缺失的成员为 Nothing,两个 Nothing 相等。数字与数字比较,文本与文本比较;不同类型的值永不相等(第2.3.5.2节)。
函数 length、count、value、match 和 search 按 RFC 9535 的定义得到支持。match 和 search 接受 RFC 9485 格式的 I-Regexp 正则表达式;不是有效 I-Regexp 的模式不匹配任何内容。数组和对象字面量不属于该语法,因此工具会拒绝它们;函数结果单独用在过滤器中时也会被拒绝,因为 RFC 9535 认为它类型不正确。
书店示例
使用示例文档和查询 $.store.book[[email protected] < 10].title 时,价格低于10的是第一本和第三本书。它们的标题就是下方的两个匹配项,并附有每个匹配项的规范化路径。
| 规范化路径 | 值(JSON) |
|---|---|
| $['store']['book'][0]['title'] | "Sayings of the Century" |
| $['store']['book'][2]['title'] | "Moby Dick" |
常见问题
键存在时,为什么查询什么也没有返回?
名称选择器只匹配对象中名称完全相同的成员,而且比较区分大小写。它从不匹配数组的元素,因此对数组请使用索引或通配符。
在过滤器中,为什么13与 "13" 不相等?
RFC 9535 认为不同类型的值不相等(第2.3.5.3节)。数字与文本是不同的值,因此即使字符看起来相同,== 为假,!= 为真。
负索引选择什么?
负索引从数组末尾开始计数:-1是最后一项,-2是倒数第二项。超出数组范围的索引不选中任何内容,也不算错误(第2.3.3.2节)。
为什么工具拒绝单独放在过滤器中的 length(@)?
length 返回数字,而过滤器需要一个真或假的测试。请对结果进行比较,例如 [?length(@.title) > 15],这样的写法类型正确。
工具会把我的 JSON 发送到服务器吗?
不会。文档由您的浏览器用 JSON.parse 读取,查询也在那里运行,而且不会存储任何内容。本页面不发出任何网络请求。
资料来源
- RFC 9535:JSONPath: Query Expressions for JSON,第1.5、2.3、2.4、2.5与2.7节(英文)
- RFC 9485:I-Regexp: An Interoperable Regular Expression Format,第3与5.3节(英文)
数据和文字最近核对于2026年11月10日星期二。