JSONPath 提取器,免费

粘贴 JSON 并输入 $.store.book[0].title 这样的路径表达式以提取值。

结果

输入 JSON 和路径,然后点击「提取」。

工作原理

  1. 粘贴您的 JSON:在输入区输入一个 JSON 对象或数组。
  2. 输入 JSONPath 表达式:键入如 $.store.book[*].author 或 $.users[?(@.age > 18)] 的路径以选择您想要的数据。
  3. 查看提取结果:匹配到的值会立即出现在输出面板中。可复制或导出结果。

为什么使用 JSONPath 提取器?

当您处理复杂的 API 响应或深层嵌套的 JSON 时,手动提取特定值既慢又容易出错。JSONPath 是 JSON 的查询语言 · 类似于 XML 的 XPath。它让您通过简洁的路径表达式精确定位所需数据 · 无论是单个嵌套值、数组中的所有元素,还是按条件过滤的记录。此工具让 JSONPath 的探索变得交互式,无需编写代码。

功能特性

常见问题

什么是 JSONPath?

JSONPath 是一种用于 JSON 文档的查询语言,类似于 XML 的 XPath。像 $.users[*].name 这样的路径会选择 users 数组中每个对象的 name 字段。它被广泛用于 API 测试、数据转换和 JSON 处理。

如何按条件过滤数组元素?

使用过滤表达式:$.items[?(@.price < 50)] 会返回价格低于 50 的所有项目。@ 符号指向当前正在求值的元素。

支持递归搜索吗?

支持。.. 运算符在各层级进行递归搜索。例如 $..name 会找到 JSON 结构中任何位置的所有 name 键,无论嵌套多深。

从博客文章到RFC 9535:JSONPath标准的17年之路

Stefan Gössner2007年2月的单篇博客文章中提出了JSONPath,将XPath的思想适配到JSON。他发布了一个JavaScript参考实现,勾勒了语法($根、点和括号子操作符、..用于递归下降、*用于通配符、[start:end:step]用于数组切片、[?(...)]用于过滤表达式),整个生态系统随之展开。实现激增:JavaScript的jsonpath、Java的JsonPathjq(Stephen Dolan,2012)与JSONPath相邻但是它自己的东西、Python的jsonpath-ngJMESPath(AWS,2014)作为更严格的对手。问题是:每个实现都漂移了。过滤器语法、递归语义、正则匹配、根标识符,所有这些在不同的库中都有细微差异。Carsten Bormann等人2023年的比较研究测试了41个不同的JSONPath实现对相同输入,对同一表达式得到了41组不同的结果。IETF JSONPath工作组于2020年召集起来修复这个问题。RFC 9535《JSONPath: Query Expressions for JSON》2024年2月发布,成为JSONPath的第一个正式标准,距Gössner原始帖子17年。RFC 9535编纂了语法,定义了规范化的输出格式,要求字符串比较的Unicode规范化,并添加了一致性测试套件。

JSONPath语法速查表

覆盖大多数实际查询的七个操作符:

你实际使用JSONPath的地方

会咬人的错误

JSONPath vs jq vs JMESPath vs JSON Pointer

更多常见问题

JSONPath和XPath相同吗?

受其启发,但不相同。XPath由W3C于1999年为XML完成,JSONPath由Gössner于2007年勾画,将相同想法带入JSON。最大的差异:JSONPath使用.[]而不是/,JSONPath没有XML命名空间或属性的概念,JSONPath标准化得晚得多(2024 vs 1999),所以多年来它是一种事实上的语法,有许多不兼容的实现。

为什么相同的JSONPath在不同工具中给出不同结果?

因为JSONPath直到RFC 9535(2024年2月)才标准化。在此之前,每个实现都自己决定过滤器语法、正则支持、根标识符、转义规则和边缘情况(空数组、缺失键、过滤器中的类型强制)。2023年IETF工作组研究测试了41个实现对相同输入,得到了41组不同的结果。RFC 9535修复了新和更新的库;旧库将分歧,直到它们迁移。始终检查你的库是否声明「RFC 9535一致」。

我可以用JSONPath修改JSON,还是只能读取?

RFC 9535严格定义JSONPath为查询语言:它从文档返回值,不会变更。要修改JSON,使用JSON Patch(RFC 6902),它使用JSON Pointer路径和add/remove/replace/copy/move/test操作。一些库结合两者(例如JavaScript中的jsonpath-plus有一个apply()变更扩展),但那不是标准JSONPath。

JSONPath支持过滤器中的正则表达式吗?

RFC 9535添加了两个正则函数:match(node, regex)匹配整个字符串,search(node, regex)匹配任何子字符串。示例:$.book[?(match(@.isbn, "^978-"))]。正则风味是I-Regexp(RFC 9485,XML Schema正则的配置文件),不是PCRE或JavaScript正则。较旧的库使用其宿主语言的正则风味,这使得正则查询特别不可移植。

当我使用此工具时,我的JSON会被发送到任何地方吗?

不。路径评估完全在浏览器的JavaScript引擎中运行。在DevTools中打开Network选项卡并运行查询,你将在评估期间看到零出站请求。对带有秘密的API响应、带有PII的数据库转储或包含凭据的配置文件安全。

相关工具

JSON 树形查看器,免费 免费在线 JSON 格式化器和验证器 JSON → CSV 转换器,免费 JSON 比较器,免费