n8n Set节点:如何同时设置多个字段?

2026-02-19 11 0

场景导入:别再被“脏数据”折腾到深夜了

笔者在做 RPA 项目时,最头疼的不是复杂的 API 调用,而是处理那些五花八门的“脏数据”。比如,你从一个 API 返回的 JSON 数据里,想把 user_nameuser_emailcreated_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(处理时间)。

  1. 添加节点:在你的工作流中点击“+”号,搜索并添加 Set 节点。
  2. 切换视图:在节点配置面板中,你会看到两个选项卡:“Add Field”“JSON”
  3. 可视化添加(推荐):点击 Add Field 按钮。
    • 第一行:Field Name 填 status,Value 填 Paid(类型选 String)。
    • 第二行:Field Name 填 processed_at,Value 填 ={{$now}}(这里使用表达式获取当前时间)。
  4. JSON 添加(高效):如果你要设置 5 个以上的字段,点击 JSON 选项卡,直接输入如下结构(注意 Key 必须加双引号):
    {
    "status": "Paid",
    "processed_at": "={{$now}}",
    "is_priority": true
    }

配置完成后,点击右上角的 Execute Node(执行节点),你会看到输出数据中,除了原有的 orderIdamount,还多出了你刚设置的三个新字段。

步骤三:结合表达式实现动态赋值

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)。在这里,我们不仅分享技术,更分享实战中避坑的经验。

相关文章

n8n Error Handling 节点报错太心烦?试试这些更灵活的替代方案
n8n 节点报错了?用 Error Handling 让它自动重试并通知你
n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决

发布评论