JSONPath测试 在线调试JSONPath表达式
实时测试和调试JSONPath表达式,支持过滤器、数组切片和递归下降语法,高亮匹配结果,适合接口数据提取、自动化测试和爬虫开发。
更新于 2026-08-16
相关工具
功能特性
- 实时 JSONPath 求值:输入表达式后立即显示查询结果
- 完整的 JSONPath 语法支持:点号表示法、括号表示法、通配符和递归下降
- 数组切片操作符 [start:end:step] 用于提取 JSON 数据子数组
- 过滤器表达式 [?(@.key comparison value)] 支持条件数据提取
- 递归下降 (..) 搜索深层嵌套的 JSON 结构中的匹配键
- 内置路径示例库,提供常用 JSONPath 模式供快速学习
- 匹配计数显示,一目了然知道表达式返回了多少结果
- 格式化 JSON 输出带语法高亮,方便检查结果
- 一键复制结果到剪贴板,用于代码或文档中
- JSON 验证功能,对无效输入或错误路径给出清晰错误提示
- 支持负数数组索引(如 [-1] 表示最后一个元素)
- 支持 length() 函数计算数组元素数量
使用方法
- 1在左侧文本框中粘贴或输入 JSON 数据。编辑器实时验证 JSON 格式:绿色指示有效,红色表示有错误。
- 2在输入框中输入 JSONPath 表达式,以 $ 开头。例如 $.store.book[*].title 选择所有书名。
- 3使用示例路径下拉菜单加载常用 JSONPath 模式,观察它们如何作用于数据。
- 4在右侧面板查看查询结果:匹配值以格式化 JSON 显示,并带有匹配计数。
- 5点击复制按钮将结果复制到剪贴板,或使用清除按钮重置工作区。
- 6尝试过滤器表达式如 [?(@.price < 10)] 来提取符合条件的数据。
- 7尝试数组切片语法 [start:end:step],类似 Python,如 $..book[0:2] 选取前两本书。
- 8使用递归下降 $..* 探索 JSON 文档中的每个值。
- 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)支持的运算符和边界情况不同,比如联合选择 `[,]`、脚本表达式、`~` 父节点操作符等。建议先在这里测试表达式,移植前再确认目标库支持的语法范围。