← 返回 JSON 工具

JSONPath 查询

最后更新:2026年10月2日

对 JSON 文档运行 JSONPath 表达式,查看每一个匹配及其所在的路径。查询在你的浏览器中运行,文档不会被发送到任何地方。

在浏览器中运行 无需上传 结果带路径 支持过滤器与切片 开源(MIT)

查询语言能做什么

JSONPath 之于 JSON,就像文件夹路径之于文件系统:用简洁的方式说明你要哪些值。$ 是文档根,.name 进入某个属性,[…] 在数组中选择。

过滤器判断的是存在性,而不是真值

过滤器里单独的一个路径问的是该属性是否存在。所以 [?(@.inStock)] 会匹配 inStock 为 false 的项,因为该属性存在——这是 RFC 9535 的解读。当你想判断值本身时,就明确写出来:[?(@.inStock == true)]。这是 JSONPath 最常见的意外,属于语言本身的特性,而不是本工具的问题。

它有意不做的事

不实现过滤器函数(如 length()、match()、search()),也不支持正则表达式、括号中的脚本表达式,以及某些库添加的父节点/兄弟节点扩展。使用这些的查询会被拒绝并给出提示,而不是悄悄返回错误结果——本页明示了它支持什么,所以这里的「通过」就是字面意思。

常见问题

支持哪些 JSONPath 语法?

根 $、用 .name 或 ['name'] 访问子节点、通配符 .* 与 [*]、递归下降 ..name 与 ..*、数组索引(含负数)、切片 [start:end:step]、联合如 [0,1] 与 ['a','b'],以及过滤器 [?(@.price < 10)],运算符为 == != < <= > >=,可用 && 和 || 组合。

不支持哪些?

不实现过滤器函数(如 length()、match()、search()),也不支持正则表达式、括号中的脚本表达式,以及某些库添加的 JSONPath 扩展(如父节点/兄弟节点引用)。使用这些的查询会被拒绝,而不是悄悄返回错误结果。

为什么 ?(@.inStock) 会匹配 inStock 为 false 的项?

因为过滤器里单独的一个路径是存在性判断,而不是真值判断:它问的是这个属性在不在,而设为 false 的属性依然在。要判断真值请显式写 ?(@.inStock == true)。这是 RFC 9535 对过滤器的解读。

匹配结果会告诉我它来自哪里吗?

会。每个结果都会列出它所在的路径,采用与书写查询相同的点号与方括号写法,因此可以把这个路径直接粘回查询或其他 JSON 工具中使用。

我的文档会被上传吗?

不会。文档在你的浏览器中用 JSON.parse 解析,查询在内存中运行。不会上传任何内容,断开网络后页面依然可用。

为什么 $..price 返回的比我预期的多?

递归下降会访问文档的每一层,因此 ..price 会在任何位置找到 price 属性——无论在数组里、嵌套对象里还是不相关的分支里。要收窄范围,请用更多路径来限定,例如 $.store.book[*].price。

想改用 Schema 检查文档?JSON Schema 可以做到。发现错误?联系我们。