Skip to main content
Benny的泥坑 Logo
Overview

n8n数据传递深度解析:从items到JSON的完整指南

December 31, 2025
2 min read

在用 n8n 搭工作流的时候,我经常看到有人对数据传递的理解有些模糊。其实只要搞清楚几个核心概念,n8n 的数据流就很好理解了。今天就把这些核心概念梳理一下。

数据的本质:JSON 对象流

n8n 中所有节点之间传递的数据,本质上就是一个或多个 JSON 对象。你可以把这些对象想象成在节点之间流动的”数据包”。

每个节点接收上一个节点的输出作为输入,处理它,然后产生自己的输出,传递给下一个节点。


数据结构:理解 items 和 JSON

当你查看任意一个节点的输出时,会看到一个类似这样的结构:

[
{
"json": {
"userId": 1,
"id": 1,
"title": "My First Task",
"completed": false
},
"binary": {},
"pairedItem": {
"item": 0
}
},
{
"json": {
"userId": 1,
"id": 2,
"title": " "My Second Task",
"completed": true
},
"binary": {},
"pairedItem": {
"item": 1
}
}
]

让我们分解这个结构:

数组 [ … ]:批次数据

数组里的每一个元素(每一个 JSON 对象)称为一个 item。

单个 item 的结构

每个 item 包含三个主要部分:

  1. json:这是最主要的数据部分。节点处理后的核心数据都在这里,比如 API 返回的数据、表格读取的行数据等。
  2. binary:如果节点处理或生成了二进制数据(如图片、PDF、音频),相关信息会存储在这里,通常是一个指向 n8n 临时存储的文件引用(文件名、类型、大小)。
  3. pairedItem:这个字段用于错误处理和运行时跟踪,记录当前 item 是由上游哪个 item 生成的。

节点对数据流的处理方式

1. 无输入 → 有输出

这类节点是工作流的起点,例如:

  • Schedule Trigger:按计划触发,输出当前时间等信息
  • Webhook Trigger:接收外部请求,输出请求的 payload
  • Google Sheets (Read):从表格读取数据,输出多行数据(每个 item 代表一行)

它们凭空创建了初始的 items 数组。

2. 有输入 → 有输出

这类节点是工作流的核心处理单元,例如:

  • Function:对传入的每个 item 执行自定义 JavaScript 代码
  • Set:给传入的每个 item 添加、修改或删除 json 中的字段
  • HTTP Request:使用传入 item 中的某个数据作为参数,向 API 发送请求

它们接收上游的 items,对其进行处理,然后输出新的、修改后的 items。

3. 有输入 → 无输出

这类节点是工作流的终点,例如:

  • Google Sheets (Append):将传入 items 的 json 数据写入表格
  • Email (Send):使用传入 item 中的数据作为邮件内容并发送
  • SSH:执行某个命令

它们”消费”掉传入的 items,通常不再向下传递数据。


如何使用数据?表达式和占位符

这是最关键的操作部分。在节点的配置字段中引用上游传来的数据。

n8n 使用双大括号 {{ }} 作为表达式语法。在双大括号内部,可以使用强大的表达式编辑器,它提供了变量、函数和方法。

最常用的变量

  • $json:代表当前正在处理的 item 的 json 部分
    • {{$json.title}} 获取当前 item 中 title 字段的值
    • {{$json["first-name"]}} 获取带连字符的字段名
  • $input:代表第一个输入节点的所有数据(不常用)
  • $():用于从所有上游 items 中提取数据(常用于聚合操作)
    • {{ $("Webhook").all()[0].json.body }} 获取名为 “Webhook” 的节点的第一个 item 的 body 数据
  • **$node[“节点名称”].all()`:获取指定节点的所有输出 items

示例场景

  1. Webhook 节点接收一个 POST 请求,Body 是 { "name": "Alice", "email": "[email protected]" },它会输出一个 item,其 json 为 { "name": "Alice", "email": "[email protected]" }
  2. 下一个是 Function 节点,你想生成一句欢迎语,代码可以这样写:
const name = $json.name;
items[0].json.welcomeMessage = `Hello, ${name}!`;
return items;
  1. 下一个是 Email 节点,你需要配置收件人、主题和正文:
  • To 字段:{{$json.email}}(来自上一个 Function 节点的输出)
  • Subject 字段:Welcome Onboard!
  • Body 字段:{{$json.welcomeMessage}}(Function 节点新创建的字段)

关键特性和最佳实践

一对一 vs 一对多

一个节点可以输出多个 items,下一个节点会依次处理每一个。例如,一个 “Read” 节点读取了 100 行表格,就会产生 100 个 items,下一个 “HTTP Request” 节点就会执行 100 次请求(除非你使用了循环或聚合功能)。

数据重塑

节点会改变数据流的结构:

  • “Read” 节点可能输出 100 个 items
  • “Aggregate” 节点可以把 100 个 items 合并成 1 个 item(包含一个数组)
  • “Split Out” 节点可以把 1 个包含数组的 item 拆分成多个 item

调试技巧

点击节点之间的连接线,你可以查看该节点接收到的输入数据。这是调试工作流最重要的手段,务必善用。

错误处理

由于 pairedItem 的存在,当某个节点处理失败时,n8n 可以精确地定位是哪个上游数据项导致了问题,并可以选择是停止整个工作流还是继续处理其他 items。


总结

理解 n8n 数据传递,只需记住以下几点:

  1. 数据是流:数据以 items 数组的形式在节点间流动
  2. 核心是 JSON:每个 item 的核心数据在 json 对象中
  3. 使用表达式引用:在配置任何节点时,使用 {{ ... }} 和表达式(如 $json.fieldName)来动态获取上游数据
  4. 查看输入数据:点击连接线来调试和验证数据是否正确传递

掌握了这些,你就已经理解了 n8n 至少 80% 的核心工作机制。