测试JSONPath表达式,实时显示查询结果
json.parse() 返回整个对象,而 JSONPath 让您精确地仅提取所需数据:$.store.book[*].title 在单个表达式中提取书店 JSON 的所有书名,相当于 JavaScript 中的 data.store.book.map(b => b.title)。JSONPath 广泛用于 API 测试、数据转换管线、配置管理和无代码/低代码平台。$.store.book)直接访问子级,方括号表示法($['store']['book'])用于包含特殊字符的键,通配符(*.price)匹配任意键,数组切片([0:3] 前三个元素,[-3:] 最后三个),递归下降($..author 查找任意嵌套深度的所有 'author' 键),联合选择器([0,2,4] 特定索引),过滤表达式([?(@.price < 10)] 按子值过滤,支持比较运算符和逻辑运算符),以及过滤表达式中的当前节点引用(@)。每种 JSON 查询语言服务于不同的需求和生态系统。<strong>JSONPath</strong>(RFC 9535,2024 年标准化)是最广泛实现的——支持 JavaScript、Java(Jayway JsonPath)、Python(jsonpath-ng)、.NET 以及 Postman 和 Karate 等测试工具。它是跨平台 JSON 查询的安全默认选择。<strong>jq</strong> 是一个用于 JSON 转换的完整编程语言,具有独特的语法——比 JSONPath 强大得多(支持变量、函数、算术、字符串操作、条件判断),但需要安装 jq 二进制并学习新语言。复杂 CLI 数据处理使用 jq;应用代码内的简单提取使用 JSONPath。<strong>JMESPath</strong>(AWS 的查询语言)在表达能力上与 JSONPath 相似但使用函数调用语法;它是 AWS CLI 和 SDK 中的标准。<strong>JSON Pointer</strong>(RFC 6901)最简单——仅支持精确路径访问如 <code>/store/book/0/title</code>,无通配符或过滤器;主要用于 JSON Schema 和 JSON Patch。PivaBox JSONPath 测试器以即时反馈帮助学习和调试 JSONPath 表达式——所有处理在浏览器中进行。
过滤表达式是 JSONPath 最强大的功能——根据对每个元素评估的条件选择数组元素。语法为 <code>[?(expression)]</code>,其中 <code>@</code> 指代正在测试的当前元素。示例:<code>$.store.book[?(@.price < 10)]</code>——所有低于 10 元的书籍;<code>$.store.book[?(@.category == 'fiction')]</code>——所有小说类书籍;<code>$.store.book[?(@.price < 10 && @.category == 'fiction')]</code>——便宜的小说(AND 逻辑);<code>$.store.book[?(@.isbn)]</code>——有 ISBN 字段的书籍(真值检查,查找可选字段)。过滤器可比较:字面量(单引号字符串、数字、布尔值 <code>true</code>/<code>false</code>、<code>null</code>)、使用点或方括号表示法的 <code>@</code> 子属性、以及其他过滤器(有限嵌套)。常见陷阱:字符串比较区分大小写;<code>null</code> 比较需要 <code>@.field == null</code>;标准 JSONPath 不支持正则匹配(某些实现作为扩展添加)。PivaBox JSONPath 测试器使用 jsonpath-plus 库,支持完整的 RFC 9535 过滤语法。
标准 JSONPath(RFC 9535)是<strong>只读查询语言</strong>——它选择和提取数据但不修改。这反映了原始设计理念:JSONPath 定位节点,应用代码决定如何处理它们。然而,一些实现添加了变更功能作为扩展:<strong>jsonpath-plus</strong>(本工具使用的库)支持 <code>JSONPath({path, json, callback})</code> 模式,传入回调函数接收每个匹配值并返回修改后的值。实践中,大多数 JSON 修改在应用代码中完成:(1) 将 JSON 解析为原生对象,(2) 导航到目标位置(可选使用 JSONPath 查找),(3) 直接变更对象,(4) 序列化回 JSON。对于声明式 JSON 转换,考虑 <strong>jq</strong>(明确设计用于转换)或 <strong>JSON Patch</strong>(RFC 6902)定义以操作序列(add、remove、replace、move、copy、test)描述 JSON 修改的标准化格式。PivaBox JSONPath 测试器专注于查询/选择用例——所有评估在浏览器中客户端运行。