场景导入:别再被“脏数据”折腾到深夜了
笔者在做 RPA 项目时,最头疼的不是复杂的 API 调用,而是处理那些五花八门的“脏数据”。比如,你从一个 API 返回的 JSON 数据里,想把 user_name、user_email 和 created_at 这三个字段提取出来,再拼凑成一个新的通知消息。
如果你用 JavaScript 代码节点硬写,虽然灵活,但一旦需求变更,改代码、调试、重新部署,一套流程下来,10分钟就没了。更别提那些刚接触 n8n 的新手,看到代码就头大。
这时候,Set 节点(或新版的 Set Variable 节点)就是你的救星。它的核心价值在于:**用最直观的可视化方式,批量定义变量**。今天,N8N大学就教你如何用 Set 节点一次性设置多个字段,让你的数据流瞬间变得清爽、可控。
核心实操:三步搞定多字段设置
在 n8n 的工作流中,Set 节点是数据处理的“整形医生”。它位于 Core 分类下,是我们构建逻辑时最常用的节点之一。
步骤一:理解 Set 节点的两种模式
在开始之前,你需要知道 Set 节点有两种工作模式(取决于你的 n8n 版本或节点选择):
- Keep Only Set(仅保留设置的字段):这是“清场模式”。输入数据进入后,除了你新设置的字段,其他字段全部丢弃。适合数据清洗。
- Include Set(包含设置的字段):这是“叠加模式”。保留输入数据的所有字段,并在此基础上新增或覆盖你设置的字段。适合数据增强。
笔者建议新手优先使用 Include Set,避免误删重要数据。
步骤二:添加 Set 节点并配置多字段
假设我们有一个简单的输入数据:订单 ID 为 1001,金额为 50。现在我们需要新增两个字段:status(状态)和 processed_at(处理时间)。
- 添加节点:在你的工作流中点击“+”号,搜索并添加 Set 节点。
- 切换视图:在节点配置面板中,你会看到两个选项卡:“Add Field” 和 “JSON”。
- 可视化添加(推荐):点击 Add Field 按钮。
- 第一行:Field Name 填
status,Value 填Paid(类型选 String)。 - 第二行:Field Name 填
processed_at,Value 填={{$now}}(这里使用表达式获取当前时间)。
- 第一行:Field Name 填
- JSON 添加(高效):如果你要设置 5 个以上的字段,点击 JSON 选项卡,直接输入如下结构(注意 Key 必须加双引号):
{
"status": "Paid",
"processed_at": "={{$now}}",
"is_priority": true
}
配置完成后,点击右上角的 Execute Node(执行节点),你会看到输出数据中,除了原有的 orderId 和 amount,还多出了你刚设置的三个新字段。
步骤三:结合表达式实现动态赋值
Set 节点的精髓在于 表达式(Expression)。你不能只把它当成静态的配置工具。
在设置 Value 时,输入 {{ 会唤起 n8n 的表达式建议列表。你可以引用上游节点的数据,或者使用内置函数。例如:
- 引用上游数据:
{{ $json.orderId }} - 字符串拼接:
订单 #{{ $json.orderId }} 已支付 - 数学计算:
{{ $json.amount * 1.1 }}(计算 10% 税费)
通过这种组合,你可以一次性生成包含动态内容的多个字段,而无需编写任何代码。
避坑指南:新手常犯的错误
虽然 Set 节点看似简单,但在实际生产环境中,N8N大学 观察到很多同学在以下细节上栽过跟头:
1. 字段类型不匹配导致的 Bug
n8n 是强类型语言。如果你在 Set 节点里手动输入了一个数字 123(未加引号),n8n 会将其识别为 Number 类型。但如果你在后续的 HTTP Request 节点中需要它作为 String,可能会导致请求失败或参数错误。
解决方案:在 Set 节点配置中,明确通过下拉菜单选择字段类型(String, Number, Boolean 等),或者使用表达式强制转换,例如 {{ $json.orderId.toString() }}。
2. 误用“Keep Only Set”导致数据丢失
这是最致命的错误。如果你在 Set 节点勾选了 Keep Only Set,但只设置了 1 个字段,那么输出给下一个节点的数据就只剩下这 1 个字段了。这会导致下游节点因为缺少必要字段而报错(比如 Webhook 回调时缺少 userId)。
解决方案:除非你明确需要清洗数据(例如只保留 ID 传给数据库查询),否则默认使用 Include Set 模式。
FAQ 问答
Q1:Set 节点和 Code 节点有什么区别?我该用哪个?
Set 节点 适合处理结构清晰、逻辑简单的字段定义和赋值。它支持批量操作,且无需编写代码,维护成本低。
Code 节点(JavaScript) 适合处理复杂的逻辑判断、循环遍历或复杂的数学运算。
建议:能用 Set 节点解决的,尽量不要写代码,这样工作流更直观。
Q2:为什么我在 Set 节点设置的字段,在下游节点看不到?
通常是因为数据流路径的问题。请确保你的 Set 节点连接到了正确的下游节点。另外,检查一下是否开启了 Keep Only Set 模式,导致其他字段被隐藏。在调试界面,选中 Set 节点,查看 Output 面板,确认字段是否已生成。
Q3:Set 节点可以设置深层嵌套的 JSON 对象吗?
可以。虽然 Set 节点的 UI 主要用于扁平化字段设置,但你可以通过 JSON 模式直接输入嵌套结构。例如,设置一个名为 metadata 的字段,值为 {"source": "n8n", "priority": 1}。在下游节点中,你可以通过 {{ $json.metadata.priority }} 来访问。
总结与资源
掌握 Set 节点 的多字段设置,是构建复杂 n8n 工作流的基石。它不仅提升了数据处理的效率,更让你的逻辑架构变得清晰可读。记住,自动化的核心不是代码量,而是逻辑的清晰度。
如果你想深入学习更多 n8n 的高级技巧,欢迎访问 N8N大学 (n8ndx.com)。在这里,我们不仅分享技术,更分享实战中避坑的经验。