跳转到内容

Set 节点 · 数据塑形的瑞士军刀

第 2 章 · 第 3 节

Set 节点是 n8n 里第二常用的节点(仅次于 HTTP Request)。它的作用很简单——对数据做”加 / 改 / 删 / 重命名”四件事。学会它,你的工作流就能优雅处理 80% 的数据塑形场景。

操作例子
增加字段{name: "Alice"}{name: "Alice", status: "new"}
改字段值{age: 30}{age: 31}(生日加一岁)
重命名字段{firstName: "Alice"}{name: "Alice"}
删除字段{name: "Alice", _internal: "x"}{name: "Alice"}

模式 1 · Manual Mapping(手动映射,推荐)

Section titled “模式 1 · Manual Mapping(手动映射,推荐)”

最直观的模式。每个字段独立配 Name 和 Value:

set-manual.txt
Mode: Manual Mapping Fields to Set: - Name: greeting Value: Hello - Name: timestamp Value: ={{ $now.toISO() }} ← 表达式 - Name: full_name Value: ={{ $json.first }} {{ $json.last }} Include Other Fields? - All Fields ← 上游数据全部保留 - All Except 字段名 ← 排除某些 - None ← 只保留新增字段

Include Other Fields 的选择是关键——这决定了 Set 后只保留新增的字段,还是把上游数据也带下去

模式 2 · JSON Mode(一次性大改造)

Section titled “模式 2 · JSON Mode(一次性大改造)”

如果要做的修改太多,Manual 模式累,可以切到 JSON 模式直接写一份完整 JSON:

set-json.txt
Mode: JSON JSON Output: { "name": "{{ $json.first }} {{ $json.last }}", "email": "{{ $json.email.toLowerCase() }}", "company": "{{ $json.company || 'Unknown' }}", "tags": ["auto-imported", "{{ $now.format('yyyy-MM') }}"] }

适合: 一次要重塑大量字段的场景。

📍 add-timestamp.txt
输入: { "user": "Alice", "action": "login" } Set 配置: - Name: timestamp Value: ={{ $now.toISO() }} - Include Other Fields: All Fields 输出: { "user": "Alice", "action": "login", "timestamp": "2026-05-13T10:23:45Z" }

场景 B · 字段重命名 + 删除内部字段

Section titled “场景 B · 字段重命名 + 删除内部字段”
📍 rename-clean.txt
输入: { "firstName": "Alice", "lastName": "X", "_internalId": 123 } Set 配置: - Name: name Value: ={{ $json.firstName }} {{ $json.lastName }} - Include Other Fields: All Except → firstName, lastName, _internalId 输出: { "name": "Alice X" }

场景 C · 标准化数据(导入前清洗)

Section titled “场景 C · 标准化数据(导入前清洗)”
📍 normalize.txt
输入: { "Email": "ALICE@X.COM ", "Phone": "+1 (555) 123-4567" } Set 配置(JSON Mode): { "email": "{{ $json.Email.trim().toLowerCase() }}", "phone": "{{ $json.Phone.replace(/[^0-9]/g, '') }}" } 输出: { "email": "alice@x.com", "phone": "15551234567" }

n8n 早期叫 “Set”,新版叫 “Edit Fields”。功能基本相同,新建 workflow 都用新版(Edit Fields,typeVersion 3+)。

老旧 workflow 里的 “Set” 节点不必急着升级,能跑就跑。但要注意:

表达式优势:让 Set 变成”小型函数”

Section titled “表达式优势:让 Set 变成”小型函数””

Set 的 Value 字段支持完整 JavaScript 表达式(在表达式模式下),所以它能做的事远超”塑形”:

💡 set-as-function.txt
# 条件值 status: ={{ $json.score > 60 ? 'pass' : 'fail' }} # 字符串处理 slug: ={{ $json.title.toLowerCase().replace(/\s+/g, '-') }} # 时间计算 deadline: ={{ DateTime.now().plus({days: 7}).toISO() }} # 数组聚合 total: ={{ $json.items.reduce((sum, it) => sum + it.price, 0) }}

第 3 部分会专门讲表达式的所有细节。

  • Set 节点做四件事:增 / 改 / 删 / 重命名 字段
  • 两种模式:Manual Mapping(直观)/ JSON(批量)
  • Include Other Fields 决定保留上游字段还是只留新字段
  • Value 支持完整 JS 表达式,让 Set 变身”小函数”
  • 复杂数组逻辑用 Code 节点更清晰

下一节看看 n8n 的 500+ 应用节点是怎么分类的。