第四节:理解 JSON 结构与 Item 概念

引言

上一章我们成功让工作流"动"了起来,体验了节点间数据传递的魔力。但你是否好奇,数据在节点间的"血管"里究竟以何种形态流动?理解这一点,是摆脱"连线魔法师"、成为真正架构师的关键。本章,我们将深入 n8n 的数据血液------JSON 与 Item。

核心理论:理解 JSON 与 Item

在 n8n 中,数据并非以单一"值"的形式传递,而是被精心组织成一种名为 "Item" 的结构。你可以将整个工作流想象成一个精密的流水线:

核心概念:标准集装箱

Item 是标准集装箱 :每个 Item 就是一个独立的、结构化的数据包裹,其本质是一个JSON 对象。例如,一个来自 HTTP 节点的 API 响应,其主体(Body)会被包装成一个 Item。

核心架构:集装箱阵列

工作流处理的是集装箱阵列 :数据在节点间并非单个 Item 传递,而是以 "Array of Items"(Item 数组) 的形式流转。即使上游节点只产生了一个 Item,它也会被放入一个数组中(即 [item])传给下游。

运行机制:按 Item 执行

节点的"按 Item 执行"机制 :这是 n8n 最独特且强大的设计。当一个节点接收到一个包含多个 Items 的数组时,默认情况下,它会为数组中的每一个 Item 都执行一次操作。例如,一个"HTTP Request"节点收到一个包含 10 个用户 ID 的 Item 数组,它就会自动发起 10 次 HTTP 请求(每个请求使用一个 Item 中的数据)。

底层流转原理:每个节点都有输入和输出。输入是上一个节点传来的 Item 数组,节点内部逻辑会处理这个数组(可能遍历每个 Item),处理完成后,再输出一个新的 Item 数组给下游。这个过程中,数据的 JSON 结构可以被增删改查。

实战演练:观察数据的"真面目"

让我们通过一个简单工作流,亲眼看看数据的真实形态。

步骤 1:创建并配置工作流

  1. 在 n8n 编辑器中,创建一个新工作流。

  2. 从节点面板拖入一个 "Schedule Trigger" 节点。保持其默认配置(每 1 分钟触发一次)。

  3. 从节点面板拖入一个 "Edit Fields" 节点,并将其连接到 Schedule 节点之后。

步骤 2:使用 Edit Fields 节点观察输入数据

  1. 点击 Edit Fields 节点。在配置面板中,切换到 "Mode" 选项卡。

  2. 将模式从 "Define Fields Below" 改为 "Pass Through"。此模式下,节点不会修改数据,仅作透传,是我们理想的"观察窗口"。

  3. 点击右上角的 "Execute Node" 按钮,单独运行这个 Edit Fields 节点。

步骤 3:分析输入/输出面板

运行后,节点下方会展开输入(INPUT)和输出(OUTPUT)面板。

INPUT 面板显示的数据结构示例:

复制代码
[
  {
    "json": {
      "timestamp": 1715589123456,
      "_cron": "* * * * *"
    },
    "binary": {},
    "pairedItem": {
      "item": 0
    }
  }
]

关键解读

  • 最外层的 [ ... ] 表明这是一个 Item 数组,即使只有一个 Item。

  • 数组内的每个对象就是一个 Item

  • Item 内部包含几个主要属性:

    • json: 核心数据区 。所有你需要操作和传递的业务数据都在这里。本例中,Schedule 节点产生了 timestamp_cron 两个字段。

    • binary: 存放二进制数据,如图片、文件。当前为空。

    • pairedItem: n8n 用于追踪数据血缘的内部信息。

步骤 4:修改并观察数据变化

  1. Edit Fields 节点的模式改回 "Define Fields Below"

  2. 在"Add Field"区域,点击"String"添加一个字段。

  3. 设置 Field NamemessageField Value"Hello n8n!"

  4. 再次点击 "Execute Node"。观察 OUTPUT 面板:

OUTPUT 面板显示的数据结构示例:

复制代码
[
  {
    "json": {
      "timestamp": 1715589123456,
      "_cron": "* * * * *",
      "message": "Hello n8n!" 
    },
    "binary": {},
    "pairedItem": {
      "item": 0
    }
  }
]

可以看到,输出的 Item 中,json 对象里新增了我们定义的 message 字段。这就是节点修改数据的基本方式。

避坑指南 / 高阶技巧

  1. "为什么我的循环节点运行了这么多次?":检查输入该节点的 Item 数组长度。如果数组有 100 个 Item,节点默认就会执行 100 次。控制 Item 数组的"体积"是性能优化的关键。

  2. 访问深层 JSON 字段 :在节点配置中引用数据时,使用点号 . 或方括号 [] 路径。例如,要引用上面数据中的时间戳,表达式应为 {``{ $json.timestamp }}{``{ $json["timestamp"] }}

  3. 处理空数组或空数据 :在 IF 分支、错误处理等逻辑中,务必考虑上游可能传来空数组 [] 的情况,使用"Split In Batches"或"IF"等节点进行判断,避免下游节点报错。

  4. 利用"Paired Item"调试 :当数据流复杂时,pairedItem 属性可以帮助你追溯某个 Item 是由上游哪个 Item 生成的,这在调试数据拆分、合并时非常有用。

本章小结

本章我们揭开了 n8n 数据流转的神秘面纱:

  • 核心单位是 Item ,它是一个包含 jsonbinary 等属性的结构化对象。

  • 数据以 Item 数组(Array of Items) 的形式在节点间传递。

  • 节点默认的 "按 Item 执行" 机制是自动化批处理能力的基石。

  • Edit Fields 节点 是观察和理解数据结构的瑞士军刀。

牢牢掌握"Item 视角",你就能精准预测和控制工作流中每一份数据的命运,为后续构建复杂逻辑打下坚实基础。

相关推荐
易生一世3 小时前
JWT详解
json·证书·jwt·token·ai skills
TA远方1 天前
【JavaScript】Promise对象使用方式研究和理解
javascript·编程·脚本·web·js·promise·委托
原来是猿1 天前
JSON 序列化与反序列化 —— 用 Jsoncpp 打造自己的网络协议
网络·网络协议·json
愈努力俞幸运1 天前
json schema
json
神所夸赞的夏天2 天前
如何获取多层json数据,存成dictionary,并取最大最小值
java·前端·json
熊文豪2 天前
打造智能写作工作流:n8n + 蓝耘MaaS平台完整实战指南
ai写作·工作流·n8n·蓝耘maas
web3.08889993 天前
天猫API接口详解:商品详情与关键词搜索商品指南及代码示例
python·json
我命由我123453 天前
前端开发概念 - 无障碍树
javascript·css·笔记·学习·html·html5·js
老神在在0013 天前
jsonshema小点
python·json
苦夏木禾4 天前
URL 类 详解
node.js·js