JSON路径测试器

粘贴一个 JSON 文档并输入类似$..book[?(@.price<10)]的JSONPath表达式。测试工具会将其与文档内容进行比对,并显示所有匹配项及其精确路径。此功能特别适用于验证您即将插入脚本或API规范中的查询(Postman、k6和JMeter均支持JSONPath)。

如何测试 JSONPath 表达式

  1. 1

    粘贴 JSON 文档

    所有有效的 JSON 类型,对象、数组及深度嵌套结构。

  2. 2

    输入表达式

    以 `$` 作为根节点;使用 `.` 作为子节点,`..` 用于递归下降,`[*]` 作为通配符。

  3. 3

    实时查看匹配项

    每条匹配项均显示其数值及完整的 JSONPath 路径,并在原始文档中高亮显示。

  4. 4

    复制结果

    将匹配项复制为 JSON 数组,或逐个复制每个路径以供下游代码使用。

JSONPath语法参考

表达式 含义
$ 根元素
$.store $ 的子项,名称为 store
$["store"] 同样,方括号形式
$..author 所有深度下的 author 属性
$.store.book[*] 店内所有书籍
$.store.book[0] 第一本书
$.store.book[-1:] 最后一本书
$.store.book[0:2] 前两本书(切片)
$.store.book[?(@.isbn)] 具有 isbn 属性的书籍
$.store.book[?(@.price < 10)] 价格低于 10 的书籍
$.store.book[?(@.category == "fiction")] 小说类书籍
$..* 每个值,无处不在

过滤表达式

过滤表达式使用 @ 指代当前节点。该测试工具支持以下常用运算符:==!=<><=>=&&|| 以及正则表达式 =~

$.items[?(@.qty >= 10 && @.price < 50)]

JSONPath 方言

目前存在多种JSONPath实现方案,其间存在一些细微的兼容性差异。本测试工具遵循Goessner原始规范RFC 9535的修订版本,这些规范与以下标准兼容:

  • JaywayJsonPath(Java)
  • jsonpath-plus(JavaScript)
  • jsonpath-rw(Python)
  • jq 基本路径表达式

不兼容的功能(如使用任意JS的脚本表达式)会在错误面板中显示标记。

当 JSONPath 比完整解析器更胜一筹时

  • 测试断言:Postman 的 pm.expect(jsonData).to.have.jsonPath(...) 会接收一个路径参数。
  • 配置提取:无需依赖库即可从庞大的API响应中提取单个值。
  • 负载测试脚本:k6、JMeter 和 Gatling 均支持使用 JSONPath 进行验证。
  • Kubernetes/AWS CLI--query--jsonpath 标志可让您自定义命令行输出内容。

常见错误

  • 在数组上使用 . $.users.0.name 不正确,请使用 $.users[0].name
  • 忘记使用 .. 进行深度匹配。$.name 这样的路径仅与顶级路径 name 匹配;请统一使用 $..name
  • 混淆 JSONPath 与 jq 的用法。 jq 是一个包含控制流和转换功能的扩展集;而 JSONPath 仅用于数据提取。
  • 正则表达式锚定: =~ /foo/ 用于匹配子字符串;如需精确匹配,请使用 /^foo$/

常见问题

JSONPath是一种纯粹的数据提取语言,支持选择、过滤和切片操作;而jq则是一套完整的查询/转换语言,具备控制流、变量和函数功能。对于简单的数据提取任务,JSONPath更具可移植性;而对于复杂的数据转换场景,则推荐使用jq。

Goessner原始规范结合RFC 9535的改进版本,兼容JaywayJsonPath(Java)及jsonpath-plus(Node)。不支持方言特定扩展(含任意代码的脚本表达式)。

是的。$..book[?(@.title =~ /^Harry.*/)] 可匹配所有标题以“Harry”开头的书籍;如需完全匹配,请使用 ^$

是的。JSON 和 JSONPath 求值器均驻留在您的浏览器中,您的文档及查询请求始终不会离开当前标签页。

相关工具

此工具还提供其他语言版本