数据清洗第一步:详解 n8n Edit Fields (Set) 节点进行变量赋值与类型转换

2026-01-20 13 0

数据清洗第一步:详解 n8n Edit Fields (Set) 节点进行变量赋值与类型转换

在 n8n 的世界里,数据就像流水线上的零件。它们从 API 响应或数据库里出来时,往往带着一身的毛刺——格式不对、字段冗余、类型错误。如果直接把它们塞进下一个环节,比如写入 Google Sheets 或发送邮件,大概率会报错。

数据清洗第一步:详解 n8n Edit Fields (Set) 节点进行变量赋值与类型转换

这就是为什么我说,掌握数据清洗是玩转自动化的第一关。而在这场清洗行动中,Edit Fields (Set) 节点(老版本叫 Set 节点)就是你手里最锋利的瑞士军刀。今天,N8N大学就带你彻底搞懂它,让你从“跑通流程”的新手,进阶为“掌控数据”的老司机。

一、为什么 Edit Fields 节点是清洗神器?

很多新手容易混淆 Set 节点和 Function 节点。觉得写 JS 代码才叫高级。但笔者在实际开发中,80% 的数据处理需求,用 Edit Fields 配置化界面就能搞定,而且更直观、更不容易出错。

它的核心能力就两招:

  • 变量赋值(重命名/新增):把乱七八糟的字段名改成统一规范的,或者基于现有字段计算出新字段。
  • 类型转换:这是坑最多的地方。API 返回的数字经常是字符串(String),日期是 ISO 格式字符串,这些如果不转,后续逻辑全崩。

二、核心实操:从乱码到整数的蜕变

假设我们正在做一个电商监控机器人。API 返回的订单数据里,价格字段是 "$1,200.50"(字符串),状态码是 1(但它是字符串 "1")。我们要清洗它,以便后续进行金额统计。

步骤 1:进入“重塑模式”(Modify Existing)

拖入 Edit Fields (Set) 节点,点击它。你会看到默认的 "Keep All Fields"(保留所有字段)。但在清洗时,我们通常需要大刀阔斧。我建议点击右上角的切换按钮,选择 "Modify Existing" 或者直接在下方配置。

这里有个隐藏技巧:如果你想保留所有字段,但只修改其中一两个,可以在配置中把其他字段显式加上。但最稳妥的方式是,先理清你需要哪些字段。

步骤 2:搞定类型转换(Type Casting)

这是本文的重点,也是最容易报错的地方。请看下面这个场景:

  • 输入:price = "$1,200.50" (String)
  • 目标:price_clean = 1200.50 (Number)

Edit Fields 的配置栏中,添加一个字段映射:

  1. **Name (目标字段名)**: 输入 price_clean
  2. **Type**: 选择 Number。这是关键!n8n 会尝试强制转换。
  3. **Value (值)**: 这里不能直接填,要用表达式。点击输入框,选择 price

笔者的硬核建议: 如果数据里有 "$" 或 ","(如 $1,200.50),直接转 Number 会变成 NaN(Not a Number)。你必须先做一步字符串处理,或者利用 JavaScript 表达式。

如果你使用的是 Function 节点配合(虽然我们主讲 Set,但这是最佳实践):

return { price_clean: parseFloat(items[0].json.price.replace(/[$,]/g, '')) };

或者只用 Edit Fields 的表达式能力(如果 n8n 版本支持):

在 Value 处填入:{{ parseFloat($item.json.price.replace(/[$,]/g, '')) }}

步骤 3:日期格式标准化

另一个清洗重灾区是日期。API 给你 2023-10-27T08:00:00Z,但你的数据库需要 YYYY-MM-DD

Edit Fields 中:

  1. **Name**: date_formatted
  2. **Type**: 选择 String(或者 Date,取决于目标系统)。
  3. **Value**: 使用表达式格式化。

表达式参考:{{ $item.json.created_at.toFormat('yyyy-MM-dd') }}

注意:n8n 的日期对象是 Luxon。如果你发现 .toFormat 不可用,说明你拿到的是字符串。此时需要先 {{ new Date($item.json.created_at) }} 转一下,或者在表达式里直接用 JS 的 Date 方法。

三、避坑指南:N8N大学 的经验之谈

在 n8n 大学(n8ndx.com)的社群里,关于 Set 节点的报错每天都有几十条。这里总结两个最经典的坑:

坑点 1:布尔值(Boolean)的陷阱

很多 API 返回 "true"(字符串)或者 1(整数)来代表布尔值。在 Edit Fields 里,如果你设置 Type 为 Boolean,n8n 只认 truefalse(不带引号)。

解决方案: 如果输入是字符串 "true",你必须先用表达式判断:{{ $item.json.status === "true" }},然后把结果赋值给新字段。

坑点 2:数组(Array)与对象(Object)的混淆

新手常问:“为什么我设置了一个字段是数组,结果变成了对象字符串?”

这是因为你在 Value 里直接填了 [1,2,3] 而没有使用表达式模式。在 Edit Fields 的界面上,如果你不通过“Add Expression”(添加表达式)来输入,n8n 有时会把它当成纯文本处理。

硬核操作: 想要生成一个复杂的 JSON 对象或数组作为字段值?请使用 Function 节点,或者在 Edit Fields 的表达式中使用 JSON.parse() 或直接构造。

四、FAQ:关于变量赋值的那些事

Q1: Edit Fields (Set) 和 Function 节点到底该用哪个?

A: 笔者的建议是:能用 Edit Fields 解决的,绝不用 Function。 因为配置化的节点可读性更好,维护成本低。只有当你需要复杂的循环、深层嵌套判断或者 n8n 没有内置函数支持的数学计算时,才上 Function 节点。

Q2: 为什么我修改后的字段,在后面的节点里找不到?

A: 检查你的 Output(输出)。在旧版 n8n 中,Set 节点如果配置了“Keep All”,它会保留原数据并追加。如果你只填写了特定字段,它会只输出你填写的字段,导致后续节点丢失上下文。新版 Edit Fields 默认是修改模式,通常会保留未变动字段,但务必在预览窗口确认输出数据结构。

Q3: 如何把多个字段合并成一个字段?

A: 在 Edit Fields 的 Value 表达式中,使用反引号(Template Literal)或字符串拼接。例如:{{ $item.json.firstName + ' ' + $item.json.lastName }}

五、总结与资源

数据清洗听起来枯燥,但它是自动化流程的护城河。Edit Fields (Set) 节点看似简单,实则包含了 n8n 数据流的核心逻辑:输入 -> 处理 -> 输出。

记住,不要害怕报错,每一次类型转换的失败,都是你更懂数据的一次机会。如果你在使用 n8n 的过程中遇到更多棘手的数据问题,欢迎访问 N8N大学 (n8ndx.com),我们有更详尽的实战案例和社区支持。

保持折腾,保持进化。

相关文章

n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决
当n8n流程意外中断,Error Handling节点如何配置才能优雅降级?
n8n Error Handling节点和Try/Catch节点,到底该怎么选?

发布评论