第四节:理解 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 视角",你就能精准预测和控制工作流中每一份数据的命运,为后续构建复杂逻辑打下坚实基础。

相关推荐
我命由我123454 小时前
Vite - Vite 最小项目
服务器·前端·javascript·react.js·ecmascript·html5·js
张涛酱1074565 小时前
降低 LLM Token 成本 40-50%:TOON 格式实战
json·ai编程
wefly20176 小时前
jsontop.cn使用全攻略:免费无广告的在线工具站,电脑手机通用
开发语言·安全·json·ecmascript·json在线转换
菜鸟程序员专写BUG1 天前
SpringBoot 接口返回异常全集|JSON解析失败/响应乱码/状态码错误完美解决
spring boot·后端·json
张涛酱1074561 天前
Jackson 严格解析:拒绝"温柔"的 JSON
spring boot·json
nilm611 天前
作为前端请使用vue2,elementUI框架 根据后端返回的json 生成表格.
前端·elementui·json
心.c1 天前
从输入 URL 到页面展示的完整过程
前端·javascript·vue.js·js
wefly20172 天前
免安装!m3u8live.cn在线 M3U8 播放器,小白也能快速上手
java·开发语言·python·json·php·m3u8·m3u8在线转换
-许平安-2 天前
MCP项目笔记七(插件 calculator)
c++·笔记·json·plugin·mcp