切换工具

JSONPath 测试

用 JSONPath 表达式从 JSON 中提取数据,实时查看匹配结果

JSON 输入
0 chars · 1 lines
匹配结果
0 chars · 1 lines

使用说明

用途

JSONPath 在线测试工具,对 JSON 数据用 JSONPath 表达式(类似 XPath)查询子集。支持标准 JSONPath($.. * [] [?()])、JSONPath Plus 扩展(@parent / @type / @root)、过滤器([?(@.age > 18)])、切片([0:5])、递归下降(..)。同时支持 JMESPath 方言对比。常用于从复杂 JSON API 响应中提取特定字段、API 文档示例编写、配置文件路径表达、jq / jmespath 命令行学习。所有查询在浏览器本地完成。

操作步骤

  1. 左侧粘贴 JSON 数据
  2. 中间输入 JSONPath 表达式(默认从 $ 开始)
  3. 右侧实时显示匹配结果
  4. 常用表达式速查:$..book[*](所有书)、$..book[?(@.price<10)](便宜的书)
  5. 语法高亮:表达式各部分着色(路径 / 过滤器 / 切片)
  6. 语法错误提示:表达式不合法时高亮位置
  7. 方言切换:JSONPath(标准)/ JSONPath Plus(增强)/ JMESPath
  8. 生成代码片段:JS / Python / Java 用对应 JSONPath 库的调用代码

常见问题

JSONPath 和 JMESPath 有什么区别?
**JSONPath**(2007,Stefan Goessner): 更接近 XPath 风格,语法 $.store.book[*].author,AWS / 多数 jq-like 工具支持。**JMESPath**: AWS 官方标准,语法 store.book[*].author(无 $ 起点),管道 / 函数支持更强(如 sort_by / max_by)。**实际**: jq 命令行最常用,是另一种独立语法(最强大但学习曲线陡)。JSONPath / JMESPath 适合在代码里嵌入。
过滤器 [?(@.age > 18)] 怎么用?
`@` 表示当前迭代节点。**示例**: `$..users[?(@.age > 18)]` 找所有 users 数组里年龄大于 18 的。**支持运算符**: > < >= <= == != && ||。**字符串匹配**: `[?(@.name == "Tom")]` 严格相等,**部分库支持正则** `[?(@.name =~ /tom/i)]`(JSONPath Plus 扩展)。
$.. 和 $.* 区别?
**$.. (递归下降)**: 匹配所有层级。`$..price` 找到 JSON 里所有 price 字段(不管嵌套多深)。**$.* (单层通配)**: 只匹配当前层级所有子节点。`$.store.*` 是 store 下的直接子节点(book / bicycle),不递归。
怎么选数组的最后一个 / 倒数第二个?
**最后一个**: `$..book[-1:]` 或 `$..book[(@.length-1)]`。**倒数第二**: `$..book[-2:-1]`。**前 3 个**: `$..book[:3]`。**第 2 到第 4**: `$..book[1:4]`。语法跟 Python 切片相似。
JSONPath 能修改 JSON 吗?
**纯 JSONPath 只读**(查询语言)。**修改需要专门库**: jsonpath-plus 的 jsonpath.value(json, path, newValue) 可以设值。**复杂场景**用 jq 命令行: `jq '.users[].active = true'` 一行解决。本工具是查询调试,**修改请用代码或 jq**。

应用场景

  • API 响应字段提取:复杂 JSON 提取特定字段
  • API 文档:示例 JSON + 提取路径供调用方参考
  • 配置文件路径:项目用 JSONPath 表达式定位配置项
  • 日志分析:日志是 JSON 时按字段过滤
  • jq 命令行学习:先在 JSONPath 工具调通再转 jq

适用场景

API 字段提取、文档示例、配置路径、JSON 日志分析、jq 学习准备。后端、前端、运维、数据分析常用。多方言支持、过滤器、切片、代码片段生成是关键差异点。