在 n8n 工作流中,数据的转换和处理是自动化的核心。Set 节点(编辑字段节点)是 n8n 最强大的数据操作工具,它允许你创建、修改、重命名或删除工作流中的数据字段,就像一把数据处理的"瑞士军刀"。本教程将带你从零开始,通过实践案例快速掌握 Set 节点的所有核心功能。
Set 节点的核心作用是让你完全控制工作流中的数据结构。无论数据从哪里来(API、数据库、表单等),Set 节点都能帮你将原始、混乱的数据转换成你需要的格式。
想象这样一个场景:你从一个 API 获取了学生数据,其中名字被分成"firstName"和"lastName"两个字段,但你想在数据库中存储为单一的"fullName"字段。这就是 Set 节点大显身手的时候。它不仅能合并字段,还能进行计算、条件判断、格式转换,甚至添加时间戳。

Set 节点提供了两种不同的模式来满足不同的使用场景:
手动映射是初学者的最佳选择。这种模式提供了直观的图形界面,你可以逐个添加或修改字段,无需编写代码。
如何使用手动映射:
关键技巧:你可以从左侧的 INPUT 面板拖拽前一个节点的数据到值字段中,这样 n8n 会自动生成表达式。例如,如果你拖拽 firstName 字段,n8n 会为你写入 {{ $json.firstName }},这是一个表达式,用来动态获取前一个节点的 firstName 值。
JSON 模式适合需要创建复杂数据结构或大量字段的场景。你直接编写 JSON 代码来定义所有字段,这给了你更多的灵活性。
JSON 模式的优势:
JSON 模式示例:
{
"fullName": "{{ $json.firstName }} {{ $json.lastName }}",
"email": "{{ $json.email }}",
"joinDate": "{{ $now.toISOString() }}",
"status": "active"
}这个选项决定了输出数据中包含哪些内容。
如果你的工作流处理文件、图片等二进制数据,启用此选项可确保这些数据不会在 Set 节点处丢失。
默认情况下,如果你设置一个名为 address.city 的字段,n8n 会创建一个嵌套的 JSON 对象结构,就像这样:
{
"address": {
"city": "北京"
}
}如果禁用此选项,就会变成平级的字段 address.city(键名包含点)。
启用此选项让 n8n 在类型不匹配时不报错,例如试图将文本转换为数字时。

场景:从 API 获取的数据中,用户名被分成 first_name 和 last_name,你需要合并成 fullName。
在 Set 节点中的配置:
fullName{{ $json.first_name }} {{ $json.last_name }}运行后,输出数据会包含一个新的 fullName 字段,值为两个名字的组合。
场景:学生的数学和英文成绩分别存储,你需要计算平均分。
配置方法:
averageScore{{ ($json.mathScore + $json.englishScore) / 2 }}Set 节点会自动执行计算,得出平均分。
场景:根据成绩给学生分等级(90 以上优秀、80-89 良好、80 以下及格)。
配置方法:
grade{{ $json.averageScore >= 90 ? '优秀' : $json.averageScore >= 80 ? '良好' : '及格' }}这使用了 JavaScript 的三元运算符,实现条件分支。
场景:记录每条数据处理的时间,便于审计和日志。
配置方法:
processedAt{{ $now.toISOString() }}$now 是 n8n 的内置函数,返回当前时间的 ISO 格式字符串。
场景:后端 API 返回的字段名称不规范(例如 usr_eml 代表用户邮箱),需要转换为可读的名称。
配置方法:
email{{ $json.usr_eml }}然后启用 Keep Only Set Fields,这样输出中就只有规范化的字段名了。
下面是一个完整的、可直接在 n8n 中运行的工作流,演示了 Set 节点的多个实际应用。这个工作流模拟处理学生成绩数据:
{
"name": "学生数据转换工作流-Set节点教程",
"nodes": [
{
"parameters": {},
"id": "trigger",
"name": "Manual Trigger",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [50, 100]
},
{
"parameters": {
"mode": "manual",
"fields": [
{
"name": "firstName",
"value": "张三",
"type": "string"
},
{
"name": "lastName",
"value": "李四",
"type": "string"
},
{
"name": "mathScore",
"value": 85,
"type": "number"
},
{
"name": "englishScore",
"value": 92,
"type": "number"
},
{
"name": "status",
"value": "active",
"type": "string"
}
]
},
"id": "step1",
"name": "Set - 原始数据",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [250, 100],
"credentials": {}
},
{
"parameters": {
"mode": "manual",
"fields": [
{
"name": "fullName",
"value": "{{ $json.firstName }} {{ $json.lastName }}",
"type": "string"
},
{
"name": "averageScore",
"value": "{{ ($json.mathScore + $json.englishScore) / 2 }}",
"type": "number"
},
{
"name": "grade",
"value": "{{ $json.averageScore >= 90 ? '优秀' : $json.averageScore >= 80 ? '良好' : '及格' }}",
"type": "string"
},
{
"name": "timestamp",
"value": "{{ $now.toISOString() }}",
"type": "string"
}
]
},
"id": "step2",
"name": "Set - 数据转换",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [450, 100],
"credentials": {}
}
],
"connections": {
"trigger": {
"main": [
[
{
"node": "step1",
"type": "main",
"index": 0
}
]
]
},
"step1": {
"main": [
[
{
"node": "step2",
"type": "main",
"index": 0
}
]
]
}
}
}如何使用这个工作流:
{ 开始到最后的 })这个工作流演示的功能:
| 功能 | 说明 | 输出结果 |
|---|---|---|
| 字段合并 | 合并 firstName 和 lastName | fullName: "张三 李四" |
| 数值计算 | 计算两科成绩的平均分 | averageScore: 88.5 |
| 条件判断 | 根据平均分分等级 | grade: "良好" |
| 时间戳 | 添加处理时间 | timestamp: "2025-12-01T14:28:00Z" |
Q: Set 节点和 Function 节点有什么区别?
A: Set 节点用于简单的数据转换(添加、修改、删除字段),而 Function 节点允许你编写完整的 JavaScript 代码处理更复杂的逻辑。对于大多数场景,Set 节点已经足够了。
Q: 如何访问前一个节点的嵌套数据?
A: 使用点表示法。例如,如果前一个节点返回 { address: { city: '北京' } },你可以用 {{ $json.address.city }} 来访问城市名称。
Q: 我的表达式总是出错,怎么办?
A: 确保:
{{ }} 包围表达式Q: 如何在 Set 节点中处理数组数据?
A: 可以直接在 JSON 模式中创建数组。例如:[ {{ $json.item1 }}, {{ $json.item2 }} ]。对于复杂的数组处理,可能需要配合使用 Item Lists 或 Function 节点。
Set 节点的核心价值:
✅ 简单易用:图形化界面让初学者快速上手
✅ 功能强大:支持表达式、计算、条件判断
✅ 数据安全:灵活的选项确保你不会意外丢失数据
✅ 工作流中枢:几乎每个复杂工作流都会用到 Set 节点
掌握 Set 节点后,你就能够:
[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#