【n8n教程】:Set 节点,实现数据转换魔法!
在 n8n 工作流中,数据的转换和处理是自动化的核心。Set 节点(编辑字段节点)是 n8n 最强大的数据操作工具,它允许你创建、修改、重命名或删除工作流中的数据字段,就像一把数据处理的"瑞士军刀"。本教程将带你从零开始,通过实践案例快速掌握 Set 节点的所有核心功能。
点击获取最新AI资讯、n8n工作流、开发经验分享
Set 节点是什么?为什么你需要它?
Set 节点的核心作用是让你完全控制工作流中的数据结构。无论数据从哪里来(API、数据库、表单等),Set 节点都能帮你将原始、混乱的数据转换成你需要的格式。
想象这样一个场景:你从一个 API 获取了学生数据,其中名字被分成"firstName"和"lastName"两个字段,但你想在数据库中存储为单一的"fullName"字段。这就是 Set 节点大显身手的时候。它不仅能合并字段,还能进行计算、条件判断、格式转换,甚至添加时间戳。
核心概念:两种工作模式
Set 节点提供了两种不同的模式来满足不同的使用场景:
模式一:手动映射(Manual Mapping)
手动映射是初学者的最佳选择。这种模式提供了直观的图形界面,你可以逐个添加或修改字段,无需编写代码。
如何使用手动映射:
- 打开 Set 节点,选择Mode>Manual Mapping
- 点击Add Field按钮添加新字段
- 输入字段名称(例如"fullName")
- 在值字段中输入内容或表达式
关键技巧:你可以从左侧的INPUT面板拖拽前一个节点的数据到值字段中,这样 n8n 会自动生成表达式。例如,如果你拖拽firstName字段,n8n 会为你写入{{ $json.firstName }},这是一个表达式,用来动态获取前一个节点的 firstName 值。
模式二:JSON 输出(JSON Output)
JSON 模式适合需要创建复杂数据结构或大量字段的场景。你直接编写 JSON 代码来定义所有字段,这给了你更多的灵活性。
JSON 模式的优势:
- 可以快速批量创建多个字段
- 能够构建嵌套的对象和数组结构
- 更容易复制粘贴复杂的配置
JSON 模式示例:
{"fullName":"{{ $json.firstName }} {{ $json.lastName }}","email":"{{ $json.email }}","joinDate":"{{ $now.toISOString() }}","status":"active"}关键参数详解:让数据处理更精准
1. Keep Only Set Fields(仅保留设置的字段)
这个选项决定了输出数据中包含哪些内容。
- 启用:工作流只输出你在 Set 节点中明确定义的字段,所有其他输入数据都会被丢弃。这很有用,特别是当前一个节点返回了许多不需要的字段时。
- 禁用(默认):保留所有来自前一个节点的原始数据,加上你新添加或修改的字段。这是更安全的选择,不会意外丢失数据。
2. Include Binary Data(包含二进制数据)
如果你的工作流处理文件、图片等二进制数据,启用此选项可确保这些数据不会在 Set 节点处丢失。
3. Support Dot Notation(支持点表示法)
默认情况下,如果你设置一个名为address.city的字段,n8n 会创建一个嵌套的 JSON 对象结构,就像这样:
{"address":{"city":"北京"}}如果禁用此选项,就会变成平级的字段address.city(键名包含点)。
4. Ignore Type Conversion Errors(忽略类型转换错误)
启用此选项让 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}]]}}}如何使用这个工作流:
- 复制上面的 JSON 代码(从
{开始到最后的}) - 打开 n8n 工作区,创建一个新工作流
- 导入工作流:在 n8n 中找到"导入"选项,粘贴上面的 JSON 代码
- 执行工作流:点击"执行工作流"或按下相应按钮
- 查看结果:在最后一个 Set 节点(“Set - 数据转换”)中可以看到转换后的完整数据
这个工作流演示的功能:
| 功能 | 说明 | 输出结果 |
|---|---|---|
| 字段合并 | 合并 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: 确保:
- 使用
{{ }}包围表达式 - 字符串用单引号或双引号包围
- 检查字段名称拼写是否正确(区分大小写)
- 使用"Execute Step"测试节点,查看错误提示
Q: 如何在 Set 节点中处理数组数据?
A: 可以直接在 JSON 模式中创建数组。例如:[ {{ $json.item1 }}, {{ $json.item2 }} ]。对于复杂的数组处理,可能需要配合使用 Item Lists 或 Function 节点。
总结
Set 节点的核心价值:
✅简单易用:图形化界面让初学者快速上手
✅功能强大:支持表达式、计算、条件判断
✅数据安全:灵活的选项确保你不会意外丢失数据
✅工作流中枢:几乎每个复杂工作流都会用到 Set 节点
掌握 Set 节点后,你就能够:
- 清理和格式化来自任何数据源的数据
- 为下游节点(如数据库、API、邮件)准备正确格式的数据
- 添加业务逻辑,如计算、分类、标记等
- 构建更复杂的自动化工作流
- 官方文档
- n8n系列教程