如何使用 JSONPath 查询嵌套 JSON(无需编写循环)

发布: (2026年5月3日 GMT+8 09:21)
5 分钟阅读
原文: Dev.to

抱歉,我需要您提供要翻译的具体文本内容(除代码块、URL 和源链接之外)。请把文章的正文粘贴在这里,我会按照要求将其翻译成简体中文并保留原有的格式。

介绍

你刚刚收到一个 300 行的 API 响应。在三层嵌套内部的某个位置,有你真正需要的 email 字段。当 API 架构发生变化时,编写嵌套循环很快就会变得脆弱。
JSONPath 提供了一种简洁的、只读的 JSON 查询语言,类似于 XML 的 XPath。掌握语法后,你会经常使用它。

示例 API 响应

{
  "store": {
    "orders": [
      {
        "id": 1,
        "customer": { "name": "Alice", "email": "alice@example.com" },
        "items": [{ "sku": "A1", "qty": 2 }, { "sku": "B3", "qty": 1 }]
      },
      {
        "id": 2,
        "customer": { "name": "Bob", "email": "bob@example.com" },
        "items": [{ "sku": "C7", "qty": 5 }]
      }
    ]
  }
}

获取每位客户的电子邮件

JSONPath 表达式

$.store.orders[*].customer.email

结果

["alice@example.com", "bob@example.com"]
  • $ – 根元素
  • . – 进入对象键
  • [*] – 所有数组元素

按条件过滤

要检索 qty 大于 1 的项目:

表达式

$.store.orders[*].items[?(@.qty > 1)]

结果

[
  { "sku": "A1", "qty": 2 },
  { "sku": "C7", "qty": 5 }
]
  • ?() – 过滤表达式
  • @ – 当前节点

与显式循环的比较(Python)

# Without JSONPath — five lines, easy to get wrong
results = []
for order in data["store"]["orders"]:
    for item in order["items"]:
        if item["qty"] > 1:
            results.append(item)

JSONPath 版本只需一行,自解释。

递归下降

当你不知道键的确切位置时,使用递归下降运算符 ..

$..email

这将在文档的任意深度查找每个 email 字段——对于探索不熟悉的模式非常方便。

实用三步工作流

  1. Beautify – 将响应粘贴到 JSON Beautifier 中,以获得干净、缩进的视图。
  2. Validate – 通过 JSON Validator 进行验证,确保其格式正确(格式错误的负载会返回空结果)。
  3. Query – 使用 JSONPath 工具(例如 jsonindenter.com 上的 JSONPath Evaluator),迭代你的表达式,直到精确提取所需内容。

JSONPath 语法速查表

符号含义
$根元素
.key子键
..key在任意深度递归搜索 key
[*]所有数组元素
[0]第一个元素([-1] – 最后一个元素)
[0,2]索引为 0 和 2 的元素
[?(@.price < 10)]过滤条件:price 小于 10
@.key当前节点的键(在过滤表达式内部)

实现说明

  • Pythonjsonpath-ng
  • JavaScriptjsonpath-plus
  • Java – Jayway JSONPath

实现细节略有不同。RFC 9535(2024 年发布)正朝着标准化方向推进,但在生产代码中,您应针对所使用的具体库测试表达式。

何时使用 JSONPath 与 JSON Patch

JSONPath 是 只读 的:它用于查询和提取数据。
如果需要修改 JSON 文档(添加、替换或删除字段),请使用 JSON Patch(RFC 6902)。这两种工具相辅相成:JSONPath 用于查找,JSON Patch 用于修改。

结论

JSONPath 使复杂的 JSON 查询可组合且易读。一个写得好的表达式一眼就能传达意图,而嵌套循环则迫使读者在理解提取之前必须通读整个块。由于相同的表达式可在 JavaScript、Python、Java 以及 Postman 等工具中使用,学习 JSONPath 能在整个技术栈中受益。

免费工具参考

  • JSONPath Evaluator – 在浏览器中实时测试 JSONPath 表达式。
  • JSON Beautifier – 将原始 JSON 格式化,便于阅读。
  • JSON Validator – 在查询前验证 JSON 是否符合规范。
  • JSON Patch – 应用 RFC 6902 补丁,直接修改 JSON 结构。
0 浏览
Back to Blog

相关文章

阅读更多 »

白宫考虑在发布前审查AI模型

抱歉,我需要您提供要翻译的具体摘录或摘要文本,才能为您进行翻译。请粘贴相应的内容,我会尽快为您翻译成简体中文。