Set 节点 · 数据塑形的瑞士军刀
第 2 章 · 第 3 节
Set 节点是 n8n 里第二常用的节点(仅次于 HTTP Request)。它的作用很简单——对数据做”加 / 改 / 删 / 重命名”四件事。学会它,你的工作流就能优雅处理 80% 的数据塑形场景。
Set 节点能做什么
Section titled “Set 节点能做什么”| 操作 | 例子 |
|---|---|
| 增加字段 | 从 {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') }}"]
}
适合: 一次要重塑大量字段的场景。
场景 A · 加一个时间戳
Section titled “场景 A · 加一个时间戳” 📍 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" }
旧版 vs 新版 Set 节点
Section titled “旧版 vs 新版 Set 节点”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 部分会专门讲表达式的所有细节。
本节要点回顾
Section titled “本节要点回顾”- Set 节点做四件事:增 / 改 / 删 / 重命名 字段
- 两种模式:Manual Mapping(直观)/ JSON(批量)
- Include Other Fields 决定保留上游字段还是只留新字段
- Value 支持完整 JS 表达式,让 Set 变身”小函数”
- 复杂数组逻辑用 Code 节点更清晰
下一节看看 n8n 的 500+ 应用节点是怎么分类的。