无需登录 数据私有 本地保存

JSONPath在线查询工具 - JSON数据路径提取

15
0
0
0

JSONPath 在线查询工具

使用 JSONPath 表达式精准提取 JSON 数据中的值 · 支持过滤、递归、切片等高级语法

示例: 书店 简单对象 复杂嵌套 数组数据
快捷语法: $.* $..author $[0] $[-1] $[0:3] $[?(@.price<10)] $..*
点击"查询"按钮或按 Enter 键查看结果
语法 示例 说明
$$根对象/元素
.property$.store.book访问子属性
..property$..author递归搜索所有层级的属性
*$.store.* / $..*通配符,匹配所有子元素
[index]$[0] / $[-1]数组索引(负数从末尾计数)
[start:end:step]$[0:3] / $[1:] / $[::2]数组切片
[?(expr)]$[?(@.price < 10)]过滤表达式,@ 代表当前节点
['key']$['store']['book']使用方括号+引号访问属性(支持特殊字符)
[a,b,c]$[0,2,4]多索引/多键选择
=~$[?(@.name =~ /pattern/i)]正则表达式匹配
什么是 JSONPath?它有什么用途?
JSONPath 是一种用于从 JSON 文档中提取数据的查询语言,类似于 XML 的 XPath。它使用简洁的路径表达式来定位和筛选 JSON 结构中的元素,广泛应用于 API 测试、数据提取、配置管理、日志分析等场景。许多编程语言(JavaScript、Python、Java 等)都有对应的 JSONPath 库支持。
JSONPath 和 XPath 有什么区别?
JSONPath 的灵感来源于 XPath,但针对 JSON 数据结构进行了适配。XPath 用于 XML(基于树形标签结构),而 JSONPath 用于 JSON(基于对象和数组结构)。JSONPath 使用 $ 表示根(类似 XPath 的 /),使用点号和方括号导航,并引入了递归下降 .. 等独特语法。两者在过滤表达式的语法上也存在差异。
递归下降 .. 是如何工作的?
递归下降 .. 会深度遍历 JSON 结构的所有层级,查找匹配的属性名。例如 $..price 会返回文档中所有名为 price 的属性值,无论它们嵌套在哪个层级。这在处理结构不固定或深层嵌套的 JSON 数据时非常有用,但需要注意性能——在大型文档上使用 $..* 可能会返回大量数据。
过滤表达式支持哪些运算符?
本工具支持的过滤运算符包括:
• 比较:==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)
• 正则:=~(正则匹配,如 /pattern/i
• 逻辑:&&(与)、||(或)
• 字面量:字符串(单/双引号)、数字、truefalsenull
示例:$[?(@.price < 20 && @.category == 'fiction')]
如何在编程中使用 JSONPath?
不同语言有各自的 JSONPath 库:
JavaScript/Node.jsjsonpathjsonpath-plus npm 包
Pythonjsonpath-ngjsonpath2
Java:Jayway JSONPath(com.jayway.jsonpath
Gogithub.com/vmware-labs/yaml-jsonpath
基本用法类似:jsonpath.query(data, "$.store.book[*].title")。注意不同库对高级语法(如过滤表达式)的支持程度可能不同。
为什么查询返回空结果?
查询返回空结果的常见原因:
1. JSONPath 路径拼写错误或大小写不匹配
2. 属性名包含特殊字符(如连字符),需要用 ['prop-name'] 方式访问
3. 数组索引越界
4. 过滤条件不匹配任何元素
5. 使用了错误的导航方式(如应使用 .. 但使用了 .
建议先用简单路径验证数据结构,再逐步构建复杂表达式。
JSONPath 有官方标准吗?
截至当前,JSONPath 的正式标准仍在制定中(IETF RFC 9535 已发布,定义了 JSONPath 的规范)。在此之前,不同的库实现存在一定差异。本工具尽量遵循主流实现(如 Jayway JSONPath 和 jsonpath-plus)的语法和行为。RFC 9535 的发布将推动各实现趋向统一。
本工具支持哪些 JSONPath 特性?
本工具支持:根选择器 $、属性访问 .prop['prop']、通配符 *、递归下降 ..、数组索引与负数索引、数组切片(含步长)、多选 [0,2]、过滤表达式(含比较、逻辑、正则匹配运算符)、以及字符串/数字/布尔/null 字面量。表达式解析在浏览器本地完成,数据不会上传。