在线 JSONPath 求值器
针对你的 JSON 测试 JSONPath 表达式,并实时看到匹配结果,就在你的浏览器中。你的数据留在你的设备上。
你的 JSON 在浏览器本地完成解析与查询,绝不会上传,但请避免将敏感的生产数据粘贴到任何在线工具中。
需要先读完整棵树?试试 JSON 查看器。
关于 JSONPath 求值器
这款 JSONPath 求值器让你用 JSONPath 表达式查询 JSON 文档,并在键入时观察匹配结果的更新。粘贴任意 JSON 对象或数组,输入一个路径,例如 $.store.book[*].author、$..price 或 $.items[?(@.active)],工具就会显示有多少个节点匹配、以美化 JSON 形式呈现的匹配值,以及一个切换为查看 JSON 指针(JSON Pointer)的开关。作为一款 JSONPath 测试器,它支持完整语法:$ 根、点和括号子级访问、.. 递归下降操作符、[*] 通配符、数组切片、联合,以及带 @ 和比较的过滤表达式。点击任意示例表达式即可将其填入查询框。无效的 JSON 和损坏的路径会产生清晰的错误,而非空白屏幕。一切都在你的浏览器中运行,因此你求值的 JSON 留在你的设备上。
功能特性
- 实时结果:匹配数、值和路径会在你编辑 JSON 或表达式时更新
- 在匹配值(美化 JSON)和每个匹配的 JSON 指针路径之间切换
- 支持递归下降 ($..)、通配符 ([*])、数组切片、联合以及过滤表达式
- 用 [?(@.price < 10)] 或 [?(@.active)] 风格的谓词按节点内容过滤
- 可点击的示例表达式,一触即可填入查询框
- 对无效 JSON 与无效 JSONPath 表达式分别给出不同的错误
- 一键复制匹配的值或路径列表
- 处理深度嵌套的对象和大型数组,无需离开页面
如何使用 JSONPath 求值器
- 将你的 JSON 粘贴或键入到左侧的 JSON 面板中。
- 在查询框中输入一个 JSONPath 表达式,或点击其中一个示例。
- 在右侧读取匹配的值,并查看其上方的匹配计数。
- 切换到「Paths」以查看每个匹配的 JSON 指针,然后复制结果。
示例
输入
$.store.book[?(@.price < 10)].title
输出
[
"Sayings of the Century",
"Moby Dick"
]
一个过滤表达式仅保留价格低于 10 的书,然后投影出每本书的标题。
常见错误与故障排除
- 在你还没写任何路径之前,结果面板就显示「Invalid JSON」。 — 请先修复左侧面板中的 JSON —— 末尾逗号、单引号或未加引号的键都会使其无法解析。如果不确定,可用 JSON 格式化工具跑一遍。
- 像 [?(@.price < 10)] 这样的过滤即使字段存在也返回不到匹配。 — 过滤会比较原始值,所以请确保该字段是数字而非字符串,并确保 @ 指向每个数组元素。字符串比较要加引号,例如 [?(@.color=="red")]。
- $.book[0] 什么都返回不了,但 $..book[0] 能用。 — $. 只会从根沿确切路径走。如果 book 是嵌套的,要么写出完整路径,要么使用 .. 递归下降操作符在任意深度搜索。
常见问题
- 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 工具