场景导入:还在用 Excel 到处复制粘贴?
笔者在 N8N大学 做调研时,发现很多刚入门的小伙伴在处理数据时,依然习惯把数据导出到 Excel,手动修改一列,然后再导回去。这不仅效率低下,而且一旦数据量超过几千行,漏行、错行几乎是必然的。
在 n8n 的世界里,Set 节点(现在通常归类在 Transformation 分类下)是数据处理的“瑞士军刀”。它不仅能改字段名,还能批量修改字段值、删除字段,甚至根据条件动态变换数据结构。今天,笔者就带大家硬核拆解 Set 节点的几种批量修改实战技巧,让你彻底告别 Excel 的手动搬运。
实战技巧一:批量重命名与统一字段格式
这是最基础也最常用的操作。假设你从 API 拉取了一堆数据,字段名杂乱无章(比如有的叫 user_id,有的叫 uid),你需要在 n8n 后续的流程中统一引用。
操作步骤:
- 在你的工作流中添加一个 Set 节点。
- 点击 Fields to Set(要设置的字段)旁边的“Add Field”按钮。
- 这里有个“大白话”技巧:如果你想批量重命名,不要在 Input Data 里选,而是直接手动输入字段名。
- 使用 表达式 将旧字段映射到新字段。例如,输入
new_user_id,值设置为{{$json.user_id}}。
进阶玩法: 如果你想批量给所有字符串字段加上前缀,可以利用 n8n 的“简写表达式”。在 Set 节点的“Keep Only These Fields”(仅保留这些字段)中,你可以配合 .map() 函数进行循环处理,但这通常建议在 Code 节点 配合 Set 节点使用。对于纯 Set 节点,我们更推荐直接在字段值中使用 JavaScript 表达式。
实战技巧二:批量修改数组内的对象值(嵌套结构)
这是新手最容易卡住的地方,也是 N8N大学 社区里被问得最多的问题。当你的数据是一个数组(Array),且你需要修改数组里每个对象的某个属性时,直接用 Set 节点是不生效的。
场景: 你有一批订单数据,结构如下:
[{"id": 1, "status": "pending"}, {"id": 2, "status": "pending"}]
你想把所有的 status 批量改为 paid。
解决方案(避坑指南):
单靠 Set 节点很难直接“穿透”数组去修改。这里我们需要分两步走:
- 使用 Code 节点(推荐): 这是最硬核的解法。在 Set 节点前加一个 Code 节点,使用 JavaScript 代码遍历数组并修改值。
- 使用 Map 节点(低代码解法): 如果你不想写代码,可以使用 Map 节点。将输入设置为数组,然后在 Map 中定义映射规则,但这通常用于提取而非修改。
笔者的建议: 遇到数组批量修改,直接上 Code 节点,代码如下(Node.js 语法):
for (const item of items) {
item.json.data_array.forEach(obj => {
obj.status = 'paid';
});
}
return items;
处理完后,再进入 Set 节点进行后续的字段整理。
实战技巧三:利用表达式批量生成新数据
Set 节点的强大之处在于它完全支持 n8n 的表达式引擎。这意味着你可以基于现有数据批量计算出全新的字段。
场景: 你有一张商品列表,包含 price 和 tax_rate,你需要批量计算出含税价 full_price。
操作步骤:
- 在 Set 节点中添加一个新字段
full_price。 - 在 Value 处输入表达式:
{{ $json.price * (1 + $json.tax_rate) }}。 - 关键点: 确保 Set 节点的配置是“Add Only”(仅添加)或“Keep All”(保留所有),而不是“Keep Only These Fields”(除非你只想保留计算结果)。
这种批量计算在财务对账、数据清洗场景中非常高频。n8n 会在后台对每一条数据流执行这个逻辑,实现真正的批量处理。
避坑指南:Set 节点常见的 3 个坑
在 N8N大学 的实战课程中,我们发现 Set 节点虽然简单,但坑不少。
1. “Keep Only These Fields”的误用
很多用户习惯勾选 Keep Only These Fields,然后输入 name, age。这没问题,但如果你的输入数据是数组形式,且你只想保留数组里的某个属性,直接填属性名是无效的。
避坑: 处理数组结构时,要么先用 Code 节点提取,要么在 Set 节点的字段值中使用 .map() 过滤,不要依赖 Set 的“仅保留”功能去处理深层嵌套。
2. 忘记处理空值(Null)
批量修改时,如果源数据某字段为 null,Set 节点的表达式可能会报错或不执行。
避坑: 在表达式中加入空值保护。例如: {{ $json.field ? $json.field * 2 : 0 }}。这样即使数据为空,流程也不会中断。
3. 忽略数据类型转换
从 API 返回的数字可能是字符串格式(如 "100")。如果你直接用 Set 节点做加法,结果可能是字符串拼接("100" + "10" = "10010")。
避坑: 在表达式中强制转换类型:{{ Number($json.price) + Number($json.tax) }}。
FAQ 问答
Q1: Set 节点和 Code 节点有什么区别?我该用哪个?
A: Set 节点适合简单的字段映射、重命名和基础计算,界面直观,适合非程序员。Code 节点适合复杂的逻辑、循环(map/filter)和数据结构重塑。N8N大学 建议:先尝试 Set 节点,搞不定再上 Code 节点。
Q2: 为什么我设置的字段在下个节点里看不到?
A: 检查 Set 节点的输出是否为 0 条数据。如果表达式写错(比如引用了不存在的字段),n8n 可能会静默失败。另外,确保 Set 节点没有开启 Raw Data 模式(如果是旧版本节点)。
Q3: Set 节点能批量修改文件内容吗?
A: 不能直接修改。Set 节点主要处理 JSON 数据。如果需要批量修改文件内的文本,需要配合 Spreadsheet File 节点读取,处理后再写入,或者使用 Code 节点处理 Buffer 数据。
总结与资源
Set 节点是 n8n 数据处理的基石。掌握它,你就能处理 80% 的数据清洗工作。记住:简单的字段操作用 Set,复杂的数据结构变形用 Code。不要试图用一个节点解决所有问题,灵活组合才是自动化的精髓。
更多 n8n 硬核实战技巧,欢迎访问 N8N大学 (n8ndx.com),关注我们,一起用代码解放双手。