JSONPath 查询测试工具

粘贴 JSON 文档,并输入 JSONPath 查询。您将得到匹配的数量,以及每个匹配项的规范化路径和值。查询在您的浏览器中运行,不会发送任何内容。

免费 在浏览器中运行 核对于2026年11月10日星期二

文本必须是有效的 JSON。示例是 RFC 9535 第1.5节中的书店文档。

以 $(根)开头。过滤器用 @ 表示被测试的项,例如 [[email protected] < 10]。开头和结尾的空格会被忽略。

结果

匹配数 — 查询选中的节点数。同一节点若被查询重复选中,会被多次计数。
按顺序排列的匹配项

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 把 JSON 文档粘贴到“JSON 文档”中。可先用示例试用本工具。
  2. 在它下方的“JSONPath 查询”中输入查询,以 $ 开头。过滤器放在方括号中,例如 [[email protected] < 10]。
  3. 阅读“匹配数”,然后阅读“按顺序排列的匹配项”表:每一行给出一个匹配项的路径和值。
  4. 若消息指出了问题的位置,请检查查询中对应的字符,并修正括号、引号或点号。

查询如何选择节点

查询是 $ 之后的一串片段。子片段(如 .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 读取,查询也在那里运行,而且不会存储任何内容。本页面不发出任何网络请求。

资料来源

数据和文字最近核对于2026年11月10日星期二。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。