在线 JSONPath 求值器

针对你的 JSON 测试 JSONPath 表达式,并实时看到匹配结果,就在你的浏览器中。你的数据留在你的设备上。

你的 JSON 在浏览器本地完成解析与查询,绝不会上传,但请避免将敏感的生产数据粘贴到任何在线工具中。

需要先读完整棵树?试试 JSON 查看器。

关于 JSONPath 求值器

这款 JSONPath 求值器让你用 JSONPath 表达式查询 JSON 文档,并在键入时观察匹配结果的更新。粘贴任意 JSON 对象或数组,输入一个路径,例如 $.store.book[*].author、$..price 或 $.items[?(@.active)],工具就会显示有多少个节点匹配、以美化 JSON 形式呈现的匹配值,以及一个切换为查看 JSON 指针(JSON Pointer)的开关。作为一款 JSONPath 测试器,它支持完整语法:$ 根、点和括号子级访问、.. 递归下降操作符、[*] 通配符、数组切片、联合,以及带 @ 和比较的过滤表达式。点击任意示例表达式即可将其填入查询框。无效的 JSON 和损坏的路径会产生清晰的错误,而非空白屏幕。一切都在你的浏览器中运行,因此你求值的 JSON 留在你的设备上。

功能特性

如何使用 JSONPath 求值器

  1. 将你的 JSON 粘贴或键入到左侧的 JSON 面板中。
  2. 在查询框中输入一个 JSONPath 表达式,或点击其中一个示例。
  3. 在右侧读取匹配的值,并查看其上方的匹配计数。
  4. 切换到「Paths」以查看每个匹配的 JSON 指针,然后复制结果。

示例

输入

$.store.book[?(@.price < 10)].title

输出

[
  "Sayings of the Century",
  "Moby Dick"
]

一个过滤表达式仅保留价格低于 10 的书,然后投影出每本书的标题。

常见错误与故障排除

常见问题

JSONPath 中的 $.. 和 $. 有什么区别?
$. 从根开始逐层沿确切路径走,因此 $.store.book 只匹配直接位于 store 之下的 book 键。$.. 是递归下降操作符:$..book 会找到文档中任意深度的每一个 book 键。当你不确定某字段位于何处时,请使用 $..。
这款 JSONPath 求值器支持过滤表达式吗?
支持。过滤使用 [?(...)] 语法,其中 @ 是当前节点,例如 $.items[?(@.active)] 或 $.store.book[?(@.price < 10)]。你可以比较数字、字符串和布尔值,并用 && 和 || 组合条件。
「Paths」开关显示的是什么?
它为每个匹配返回一个 JSON 指针而非值 —— 一个像 /store/book/0/author 这样的字符串,用于在文档中定位该节点。当你需要知道某个值位于何处、而不只是它是什么时,指针很有用。
为什么我的表达式匹配到的结果比预期更多?
通配符和递归下降是贪婪的:[*] 会匹配数组的每个元素或对象的每个属性,而 $.. 会遍历整棵树。请用具体的键、索引、像 [0:2] 这样的数组切片或一个过滤来收窄结果。
我可以一次选取多个数组元素吗?
可以。用像 [0,2] 这样的联合来选取特定索引,或用像 [1:3] 这样的切片取一个范围、用 [-1:] 取最后一个元素。两者都适用于路径所到达的任意数组。
我运行查询时,JSON 会被发送到任何地方吗?
不会。表达式完全在你的浏览器中求值,因此你粘贴的 JSON 和你运行的查询都在你的设备上本地处理,不会上传。

相关工具

全部 ArrayKit 工具