在前面的教程中,我们已经掌握了 n8n 的基础操作。今天,我们将深入探讨 n8n 最核心的能力——数据处理机制。这是将简单的工作流升级为强大、智能的自动化系统的关键所在。
一、数据结构基础:理解 JSON在 n8n 中,所有数据都以JSON(JavaScript Object Notation) 格式在节点之间传递。理解 JSON 是掌握 n8n 数据处理的第一步。1.1 什么是 JSON?JSON 是一种轻量级的数据交换格式,具有易于人类阅读和编写、易于机器解析和生成的特性,是现代网络服务的通用语言。一个典型的JSON结构示例:{
"name":"张三",
"age":28,
"isActive":true,
"skills": ["Python","JavaScript","n8n"],
"address": {
"city":"北京",
"district":"朝阳区"
}
}
核心概念:
-
对象 {}
:包含键值对的无序集合 -
数组 []
:有序的值列表
1.2 n8n 中的数据流结构在 n8n 中,节点的输出始终是一个项目数组(Array of Items)。即使只有一个结果,也会被包裹在数组中。每个Item是 n8n 中数据的最小单位,它是一个容器,通常包含两个关键部分:
-
json:存放核心的结构化数据 -
binary:存放二进制数据(文件、图片等)
n8n 节点输出的典型结构:[
{
"json": {"id":1,"name":"产品A"},
"binary": {
"file": {
"data":"base64编码的数据",
"mimeType":"image/png",
"fileName":"photo.png"
}
}
},
{
"json": {"id":2,"name":"产品B"},
"binary": {
"file": {
"data":"base64编码的数据",
"mimeType":"image/png",
"fileName":"photo.png"
}
}
}
]
为什么要这样设计?把它想象成一个标准的快递包裹:json
键里面装的是信件内容(我们最常用的数据),而包裹里还有一个叫binary
的地方,用来装实物附件(如文件、图片)。这种设计让 n8n 能用一套统一的结构处理所有类型的自动化任务。未来如果需要支持第三种数据类型(比如流数据),只需在 Item 里增加一个新的键(比如stream
),而不会破坏现有的结构。快捷方式: n8n 提供了$json
这个快捷变量,让我们可以直接访问数据,而无需每次都写item.json
。二、表达式 (Expressions):与数据对话表达式是 n8n 中用于访问、操作和转换数据的核心工具。在任何输入框中,输入 「{ {」 即可进入表达式模式。2.1和(‘节点名’).json$json:当前正在处理的数据
-
它是一个快捷变量,代表当前节点正在处理的这一个 Item的 json 数据 -
当你需要对上一个节点传来的数据进行操作时,直接使用 $json
-
示例: {{ $json.name }}

$(‘节点名’).json:引用其他节点的数据
-
这是一个绝对路径引用,用于获取工作流中任意一个前置节点的数据 -
$('节点名')
:定位到指定的节点 -
示例: {{ $('HTTP Request').item.json.data }}

2.2和items这是另一个极其重要的概念,特别是在进行聚合计算或在 Code 节点中操作时。$item(当前项 – 单数)
-
代表当前正在处理的单个 Item 容器 -
它包含两个属性: $item.json
和$item.binary
-
关键: $json
就是$item.json
的官方简写,推荐使用$json
$items(所有项数组 – 复数)
-
代表流入当前节点的所有 Items 组成的完整数组 -
当你需要跨多个 Item 进行计算(如求和、计数)或查找时,必须使用它 -
示例: -
获取总项目数: {{ $items.length }}
-
计算所有订单总额: {{ $items.reduce((sum, item) => sum + item.json.amount, 0) }}
-
获取所有人的名字: {{ $items.map(item => item.json.name).join(', ') }}
三、数据映射与转换在实际应用中,从 API 获取的数据结构往往与我们最终需要的格式不一致。这时就需要进行数据映射和转换。3.1 使用 Edit Fields 节点进行简单映射Edit Fields 节点(原 Set 节点)是最常用的数据转换工具,它允许我们新增、修改或重构字段。场景示例:将 API 返回的用户数据:{
"user_name":"李四",
"user_email":"lisi@example.com"
}
转换为:{
"姓名":"李四",
"邮箱":"lisi@example.com"
}
操作方法:在 Edit Fields 节点中配置字段映射,将user_name
映射为姓名
,user_email
映射为邮箱
,即可完成转换。


3.2 使用 Code 节点进行复杂转换当转换逻辑包含复杂的条件判断或循环时,Code 节点是最佳选择。// $input.all() 获取所有 Items,是 Code 节点中推荐的用法
constitems = $input.all();
for(constitemofitems) {
item.json.status = item.json.age >=18?'成年':'未成年';
}
returnitems;
四、常用函数与变量n8n 表达式内建了丰富的 JavaScript 函数,以下是高频使用的类别:字符串处理
-
.toUpperCase()
、.toLowerCase()
:大小写转换 -
.slice(0, 10)
:截取字符串 -
.replace('a', 'b')
:替换字符 -
.split(',')
:分割字符串
数组处理
-
.length
:获取数组长度 -
.join(',')
:数组转字符串 -
.map()
:遍历转换 -
.filter()
:筛选过滤 -
.reduce()
:聚合计算 -
.find()
:查找元素
日期时间处理
-
{{ new Date().toISOString() }}
:ISO 格式时间 -
{{ Date.now() }}
:当前时间戳
条件判断(三元运算符)
-
{{ $json.score >= 60 ? "及格" : "不及格" }}
数学运算
-
Math.round()
:四舍五入 -
.toFixed(2)
:保留小数位
五、实战案例:处理复杂 API 订单数据接下来,我们通过一个实战案例来巩固所学知识。业务场景:从 API 获取一批订单,筛选出金额大于 500 的订单,并将其中的商品信息和购买人整合输出。API返回的原始数据:{
"code":200,
"data": {
"orders": [
{
"order_id":"ORD20231001",
"customer_name":"王五",
"items": [
{"product":"商品A","qty":2,"price":99.5},
{"product":"商品B","qty":1,"price":199}
],
"status":1
}
// ... 更多订单
]
}
}
工作流设计整个工作流包含 5 个关键步骤:

(1)HTTP Request 节点请求本地的接口地址http://127.0.0.1:8000/api/orders
,返回模拟的订单数据。这里有 2 个订单,都在orders
数组对象中。

(2)Split Out 节点Split Out 是 n8n 中用于拆分数据的专用节点。它的核心功能是:将一个 item 中的数组字段拆分成多个独立的 items。每个订单都处在orders
的数组里,而且整个数据作为一个单独的 Item 流动,这不方便我们后续对每个订单进行单独判断和处理,所以需要拆分。执行拆分后,数据流发生了质变:原本的 1 个 Item 变成了 2 个独立的 Items,每个 Item 就是一个完整的订单信息。

(3)Edit Fields 节点(数据整理)原始的订单数据比较杂乱,我们需要整理一下,并计算出一些新的、有用的信息,比如每个订单的总金额。使用 Edit Fields 节点,这个节点会对流入的每一个 Item 执行相同的操作。我们增加了三个字段:
-
订单总金额: {{ $json.items.reduce((sum, item) => sum + item.qty * item.price, 0) }}
-
商品清单: {{ $json.items.map(item => item.product).join(',') }}
-
订单状态: {{ $json.status === 1 ? '已完成' : '待处理' }}
勾选「Include Other Input Fields」保留已存在的字段,新增字段会一并添加进去。

(4)IF 节点(条件过滤)我们的目标是只关心金额超过 500 元的订单。现在需要设置一个条件,不符合条件的直接拦截。配置条件:{{ $json.订单总金额 > 500 }}
筛选后,只有满足条件的订单会继续流向下一个节点。

(5)Edit Fields 节点(最终输出)对于满足条件的每个订单,我们格式化信息来输出:{
"客户":"{{ $json.customer_name }}",
"订单号":"{{ $json.order_id }}",
"总金额":"{{ $json.订单总金额 }}",
"商品":"{{ $json.商品清单 }}",
"状态":"{{ $json.订单状态 }}"
}
六、进阶技巧与最佳实践在实际使用 n8n 进行数据处理时,以下技巧能帮助你更高效地构建工作流:6.1 合理使用节点类型
-
简单字段映射:优先使用 Edit Fields 节点,可视化操作更直观 -
复杂逻辑处理:使用 Code 节点,充分发挥 JavaScript 的灵活性 -
条件分支:使用 IF 或 Switch 节点,让数据流向更清晰
6.2 调试技巧
-
善用节点的「执行」按钮,逐步调试每个节点的输出, 主要是用于后面方面鼠标拖动节点的数据,不需要输入 -
在 Code 节点中使用 console.log()
输出中间结果 -
利用表达式编辑器的预览功能,实时查看表达式结果
七、总结通过这篇教程,我们系统地学习了 n8n 数据处理的核心机制:
-
数据结构:理解 JSON 和 n8n 的 Item 结构 -
表达式系统:掌握、item、$items 的使用场景 -
数据转换:学会使用 Edit Fields 和 Code 节点进行数据映射 -
实战应用:通过订单处理案例巩固所学知识
掌握这些基础内容后,我们将能够轻松自如地处理各种复杂的数据场景,从而构建更加强大和智能的自动化工作流。