JSONPath Tester
JSON Input
JSONPath Expression
Result
技术详情
JSONPath 查询器的工作原理
工具功能
JSONPath 查询器使用类 XPath 的语法从 JSON 数据结构中提取和过滤数据。输入一个 JSON 文档和一条 JSONPath 表达式,工具返回匹配的所有节点集合。支持的语法包括:$ 根节点、. 或 [] 子节点访问、* 通配符、.. 递归下降(深度搜索所有后代)、[start:end:step] 数组切片、[?(expression)] 条件过滤、@ 当前节点引用。你可以用 $.store.book[?(@.price < 10)].title 这样的表达式找到所有价格低于 10 元的书的标题。
常见开发者使用场景
JSONPath 在数据处理和 API 测试中极其有用。处理大型 JSON API 响应时只提取需要的字段,大幅减少内存和处理时间。API 测试中验证响应体特定路径的值是否符合预期——比全文 JSON 对比更精准。数据工程中从嵌套的 JSON 日志中提取特定字段用于 ELK/Splunk 分析。配置管理工具(如 AWS IAM Policy)使用 JSONPath 风格的条件语法。不熟悉 jq 或 JMESPath 的开发者也用 JSONPath 作为 JSON 查询的入门工具。
配合 JSON 差异对比器 对比从两个不同 JSON 中用 JSONPath 提取的相同路径数据,或使用 JSON 格式化器 格式化查询结果。
JSONPath 语法参考
最常用的 JSONPath 表达式:
- $:根对象或数组——所有路径的起点
- .property 或 ['property']:访问对象的属性。当属性名包含特殊字符或数字开头时,需要使用方括号表示法
- *:通配符——匹配所有属性名或数组所有元素
- ..:递归搜索——在任何嵌套深度搜索匹配的节点。如 $..author 找到所有嵌套的作者字段
- [?(...)]:条件过滤——如 [?(@.price < 10)] 过滤所有价格小于 10 的元素
常见陷阱与注意事项
- 实现差异:JSONPath 还没有官方 RFC 标准(RFC 9535 正在推进),不同实现(JavaScript jsonpath、Python jsonpath-ng、Java Jayway)的语法和支持特性可能不同。
- 性能考量:使用 .. 递归搜索时,工具需要遍历整个 JSON 树的每一个节点——用于大 JSON 时注意性能影响。
- 引号转义:在条件表达式 [?()] 中的字符串值可能需要对引号和特殊字符进行转义处理。
- 返回类型:JSONPath 返回的是节点列表而非单个值,即使只有一条匹配结果也是如此。使用 [0] 或指定索引获取第一个匹配值。
何时使用此工具而非代码
在编写 API 测试断言、提取嵌套 JSON 的关键字段、或学习 JSONPath 语法时使用此工具。生产代码中推荐使用 jsonpath-plus(NPM)、jq(命令行)或 jmespath(Python/JavaScript,语法类似但更丰富)进行 JSON 查询。