Skip to main content
UFOZoo

JSONPath测试 在线调试JSONPath表达式

实时测试和调试JSONPath表达式,支持过滤器、数组切片和递归下降语法,高亮匹配结果,适合接口数据提取、自动化测试和爬虫开发。

更新于 2026-08-16

相关工具

功能特性

  • 实时 JSONPath 求值:输入表达式后立即显示查询结果
  • 完整的 JSONPath 语法支持:点号表示法、括号表示法、通配符和递归下降
  • 数组切片操作符 [start:end:step] 用于提取 JSON 数据子数组
  • 过滤器表达式 [?(@.key comparison value)] 支持条件数据提取
  • 递归下降 (..) 搜索深层嵌套的 JSON 结构中的匹配键
  • 内置路径示例库,提供常用 JSONPath 模式供快速学习
  • 匹配计数显示,一目了然知道表达式返回了多少结果
  • 格式化 JSON 输出带语法高亮,方便检查结果
  • 一键复制结果到剪贴板,用于代码或文档中
  • JSON 验证功能,对无效输入或错误路径给出清晰错误提示
  • 支持负数数组索引(如 [-1] 表示最后一个元素)
  • 支持 length() 函数计算数组元素数量

使用方法

  1. 1在左侧文本框中粘贴或输入 JSON 数据。编辑器实时验证 JSON 格式:绿色指示有效,红色表示有错误。
  2. 2在输入框中输入 JSONPath 表达式,以 $ 开头。例如 $.store.book[*].title 选择所有书名。
  3. 3使用示例路径下拉菜单加载常用 JSONPath 模式,观察它们如何作用于数据。
  4. 4在右侧面板查看查询结果:匹配值以格式化 JSON 显示,并带有匹配计数。
  5. 5点击复制按钮将结果复制到剪贴板,或使用清除按钮重置工作区。
  6. 6尝试过滤器表达式如 [?(@.price < 10)] 来提取符合条件的数据。
  7. 7尝试数组切片语法 [start:end:step],类似 Python,如 $..book[0:2] 选取前两本书。
  8. 8使用递归下降 $..* 探索 JSON 文档中的每个值。
  9. 9在单个表达式中组合多种 JSONPath 操作符,例如 $..book[?(@.price > 10)].title 可在任何嵌套层级查找价格超过 10 的所有书名。

常见问题

什么是 JSONPath?

JSONPath 是一种针对 JSON 的查询语言,类似于 XML 的 XPath,常用于 jsonpath 在线测试、接口数据提取和自动化测试。它提供了一种简单的方法来导航、过滤和提取复杂 JSON 文档中的特定数据。JSONPath 由 Stefan Gössner 创建,现已广泛应用于多种编程语言和工具中。它使用简洁的语法,结合了点号表示法(类似 JavaScript)和受 XPath 启发的递归下降和过滤器表达式等功能。

支持哪些 JSONPath 语法?

本工具支持以下最常用的 JSONPath 操作符: • `$`:根对象(所有路径以此开头) • `.key` 或 `['key']`:子操作符,访问对象属性 • `..`:递归下降,搜索嵌套结构 • `*`:通配符,选择所有元素或属性 • `[n]`:数组索引(支持负索引反向访问) • `[start:end:step]`:数组切片操作符 • `[?(expression)]`:过滤器表达式,支持 ==、!=、<、>、<=、>= • `@`:过滤器表达式中的当前节点引用 • `length()`:获取数组长度的函数

JSONPath 与 XPath 有何不同?

JSONPath 之于 JSON 就像 XPath 之于 XML。虽然它们有相似的概念(路径表达式、通配符、谓词/过滤器),但存在关键差异: • JSONPath 使用 $ 表示根元素,XPath 使用 / • JSONPath 使用 . 访问子节点,XPath 使用 / • JSONPath 使用 .. 递归下降,XPath 使用 // • JSONPath 使用 [n] 索引数组元素(从0开始),XPath 使用 [n+1](从1开始) • JSONPath 使用 [?()] 做过滤器,XPath 使用 [谓词] • JSONPath 使用 @ 表示过滤器中的当前节点,XPath 也使用 @ 但表示属性

过滤器表达式如何工作?

JSONPath 中的过滤器表达式使用 `[?(expression)]` 语法来条件性地选择数组元素。表达式对每个元素求值,`@` 代表当前元素。常见模式: • `[?(@.price < 10)]`:price 小于 10 的元素 • `[?(@.author == 'Tolkien')]`:author 等于 'Tolkien' 的元素 • `[?(@.stock)]`:stock 属性为真值的元素 支持的运算符:==、!=、<、>、<=、>=。字符串字面量需要引号(单引号或双引号),数字字面量不需要。

为什么递归下降 (..) 返回的匹配比我预期的多?

`..` 会搜索所有嵌套层级,同一个值可能在不同路径下被多次匹配:例如 `$..title` 可能返回在另一个匹配分支下也出现的标题。它还会包含嵌套对象和数组中你本不想要的匹配。想缩小范围,可以把 `..` 与过滤器组合(如 `$..[?(@.price > 10)]`),或者确定结构时改用显式路径。

JSONPath 支持数组切片吗?

支持。JSONPath 使用 `[start:end:step]` 语法支持数组切片,类似于 Python 的切片表示法: • `[0:3]`:前三个元素(索引 0、1、2) • `[5:]`:从索引 5 到末尾 • `[:3]`:前三个元素 • `[::2]`:每隔一个元素 • `[-1:]`:最后一个元素 • `[-3:-1]`:倒数第三个和倒数第二个元素 切片索引可使用负数从数组末尾开始计数。

Python 里怎么用 JSONPath 提取数据?

pip install jsonpath-ng,然后:from jsonpath_ng.ext import parse;matches = parse('$.store.book[*].title').find(data):用 [m.value for m in matches] 取出结果。jmespath 是另一个流行选择,但语法不同:jmespath.search('store.book[*].title', data)。先在这里调试表达式,再移植到代码里。

C# 里怎么用 JSONPath 查询?

Newtonsoft.Json(Json.NET)内置 JSONPath:JToken.Parse(json).SelectTokens("$.store.book[*].title") 返回所有匹配的 JToken,取单个值用 SelectToken。表达式语法与本工具一致,可以先在这里验证路径再写 C# 代码。

为什么用在线 JSONPath 测试工具测大型 JSON 时会很慢?

对超大文档执行递归下降(`$..*`)或通配符代价很高,因为工具要在浏览器里遍历每一个节点。如果卡顿:用显式路径(如 `$.store.book[*]`)代替 `..`,避免使用 `$..*`,并把 JSON 裁剪到能复现问题的最小片段。

如何处理 JSON 或 JSONPath 语法错误?

工具实时验证 JSON 数据和 JSONPath 表达式。JSON 错误:检查缺少逗号、尾逗号、未加引号的键或不匹配的括号。JSONPath 错误:确保路径以 $ 开头,检查括号匹配,验证过滤器表达式使用正确的比较运算符。

点号表示法和括号表示法有什么区别?

点号表示法($.store.book[0].title)对简单属性访问更简短易读。括号表示法($['store']['book'][0]['title'])在属性名包含特殊字符(空格、点号、括号)或使用变量时必需。工具有两种都支持,可以自由混用。

为什么我的表达式匹配不到任何内容?

JSONPath 区分大小写:$.user 和 $.User 是不同的路径。还要检查:点号与括号写法($.items[0].name 与 $['items'][0]['name'] 都可用,但含连字符或空格的键必须用括号写法)、过滤器语法($.items[?(@.price > 10)] 需要用 ?(@...) 形式)、以及测试对象是 JSON 对象还是数组(数组用 $[*])。错误面板会显示精确的失败位置,帮助你修正表达式。

为什么同一个 JSONPath 表达式在一个库中能用,在这个 JSONPath 测试工具里却报错?

JSONPath 没有统一标准:不同的实现(Goessner 原版、Jayway、jsonpath-ng、jmespath)支持的运算符和边界情况不同,比如联合选择 `[,]`、脚本表达式、`~` 父节点操作符等。建议先在这里测试表达式,移植前再确认目标库支持的语法范围。