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

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

74
0
0
0

JSONPath核心概念

JSONPath
JSONPath是一种用于从JSON文档中选择节点的查询语言,类似于XPath之于XML文档。它提供了一种简洁的表达式语法来描述JSON数据中的路径,允许开发者通过声明式的方式定位和提取JSON中的特定数据片段,而无需编写复杂的解析代码。JSONPath最初由Stefan Goessner于2007年提出,后于2024年正式成为RFC 9535标准。
根节点($)
JSONPath表达式中的「$」符号代表JSON文档的根节点,即整个JSON对象或数组的起始位置。所有JSONPath表达式都从根节点开始,通过点号或方括号逐级访问子节点。例如 $.store.name 表示从根节点出发,先访问store属性,再访问其中的name属性。
子节点访问
JSONPath提供两种方式访问子节点:点号语法(如 $.store.name)和方括号语法(如 $['store']['name'])。点号语法更简洁,适合属性名为合法标识符的场景;方括号语法更灵活,支持属性名包含特殊字符、空格或需要动态构造路径的情况。
通配符(*)
「*」通配符用于匹配当前层级的所有元素。在对象上下文中匹配所有属性值,在数组上下文中匹配所有数组元素。例如 $.store.* 匹配store对象下的所有属性值,$.store.book[*].title 匹配所有book元素的title属性。
递归下降(..)
「..」操作符实现递归下降查询,它会从当前节点开始,递归遍历所有后代节点(包括嵌套的子节点、子节点的子节点等),并返回所有匹配的节点。例如 $.store..price 会在整个store结构中递归查找所有名为price的字段,无论其嵌套层级有多深。

过滤与操作符

过滤表达式
过滤表达式用方括号内嵌问号的语法表示(如 [?(@.price<10)]),用于对数组元素进行条件筛选。表达式中的「@」代表当前正在被评估的数组元素。过滤表达式支持比较运算符(==、!=、<、<=、>、>=)和逻辑运算符(&&、||),可以组合多个条件进行复杂筛选。
当前节点(@)
「@」符号在过滤表达式中代表当前正在被评估的节点。例如在 $.store.book[?(@.price>10)] 中,「@」代表book数组中的每一个元素,表达式的含义是:筛选出price属性大于10的所有book元素。
数组切片
JSONPath支持类似Python切片语法的数组操作,格式为 [start:end:step]。例如 [0:3] 返回索引0到2的三个元素,[-2:] 返回最后两个元素,[::2] 返回每隔一个的元素(步长为2)。切片操作简化了对数组子集的选取操作。
脚本表达式
脚本表达式允许在JSONPath中嵌入JavaScript代码进行更复杂的条件判断,格式为 [?(expression)]。虽然RFC 9535标准未强制要求实现脚本表达式,但许多工具(包括本工具)提供了基本的脚本支持,以满足更灵活的查询需求。

标准与规范

RFC 9535标准
RFC 9535是JSONPath查询语言的官方互联网标准,于2024年2月由IETF正式发布。该标准在Goessner原始提案的基础上进行了规范化和扩展,明确定义了JSONPath表达式的语法、语义和实现要求,包括核心函数、过滤表达式、数组切片等操作的标准化行为,为不同编程语言的JSONPath实现提供了统一的参考规范。
JSONPath vs XPath
XPath是用于XML文档的查询语言,而JSONPath是专为JSON数据设计的。两者在设计理念上相似,但语法存在显著差异。XPath功能更强大(支持命名空间、类型转换等),但语法更复杂;JSONPath语法更简洁直观,更贴合JSON的数据模型。在实际使用中,JSONPath在处理JSON数据时效率和可读性都优于在JSON上使用XPath。
JSONPath vs JSON Pointer
JSON Pointer(RFC 6901)是另一种JSON路径语法,使用 /name/0/title 这样的斜杠分隔路径。与JSONPath相比,JSON Pointer语法更简单但功能有限:不支持通配符、递归下降、过滤表达式等高级特性。JSON Pointer适合简单的路径定位,而JSONPath适合复杂的数据查询场景。

工具相关术语

AST(抽象语法树)
本工具在解析JSONPath表达式时,首先将其转换为抽象语法树(Abstract Syntax Tree)结构。AST将表达式分解为树状节点,每个节点代表一个操作(如属性访问、数组索引、过滤等),然后通过遍历这棵树在JSON数据上执行匹配。AST方案比字符串匹配更准确、更高效。
惰性求值(Lazy Evaluation)
本工具在显示匹配结果时采用惰性求值策略:初始只计算匹配数量,当用户点击某个结果时才展开其完整内容。这种方式避免了在匹配大量节点时造成页面卡顿,显著提升了大数据量场景下的使用体验。