笔者按:
大家好,我是N8N大学的主编。在处理自动化流程时,我们经常遇到一个痛点:数据从API拉下来是一团乱麻,直接用不仅难看,还容易导致后续节点报错。今天,我就带大家深入拆解n8n中最被低估的清洗神器——Filter节点,通过3个真实案例,教你如何把脏数据洗得干干净净。
Filter节点,你以为它只会过滤?
很多新手看到“Filter”这个名字,第一反应是“过滤数据”。没错,它确实能过滤。但在N8N大学的实战体系里,Filter节点本质上是一个逻辑判断中心。它不仅能决定数据去留,还能通过条件组合(Condition)实现复杂的数据清洗和格式预判。
在开始之前,请确保你的n8n环境已经搭建好。如果还没安装,可以先去N8N大学查阅我们的《n8n Docker一键部署指南》。
案例一:剔除无效的“僵尸数据”
场景:你从一个CRM系统导出了所有客户列表,但里面包含大量状态为“已注销”或“测试账号”的数据。你需要清洗掉这些行,只保留“有效客户”。
数据现状
输入数据可能长这样:
{
"customer_id": 1001,
"status": "active", // 有效
"email": "user@example.com"
},
{
"customer_id": 1002,
"status": "inactive", // 无效
"email": "test@test.com"
}
实战操作
在n8n中,我们在数据进入处理节点前,加入一个Filter节点:
- 输入参数设置:在Filter节点的“Conditions”中,点击“Add Condition”。
- 逻辑编写:选择字段
status,操作符选择is not equal to,值设置为inactive。 - 组合逻辑(进阶):如果想同时排除“test”状态,点击“AND”,增加一条
status is not equal to test。
避坑点:n8n的Filter对文本大小写敏感。如果你的数据里既有“Active”又有“active”,记得使用内置的 exists 或正则匹配,或者先用JS节点转小写再过滤。
案例二:多重条件筛选与格式修正
场景:你正在监控电商订单。你需要清洗出“金额大于100元”且“支付方式为信用卡”的订单,同时将金额字段格式化为纯数字。
核心挑战
API返回的金额字段通常是字符串(如 "$1,200.00"),直接进行数值比较会失败。我们需要在Filter之前或之后进行清洗。
实战操作
- 数据预处理(Set节点):在Filter前加一个Set节点,使用JavaScript表达式清洗金额:
{{ parseInt($json.price.replace(/[$,]/g, '')) }},并赋值给新字段clean_price。 - Filter节点逻辑:
- 条件1:
clean_price>100 - 条件2:
payment_method==credit_card - 逻辑关系:选择 AND(必须同时满足)。
- 条件1:
- 输出验证:连接一个Debug节点,查看输出是否只剩下符合条件的高客单价信用卡订单。
笔者经验:在Filter节点中使用数值比较时,务必确认字段类型。如果输入是字符串"100",比较运算符“大于”可能会按字典序比较,导致结果错误。先用Set节点转为Number是最稳妥的做法。
案例三:处理嵌套对象与数组清洗
场景:这是最硬核的场景。你从API获取了一组数据,其中包含嵌套的JSON对象,或者是一个数组。你需要判断数组中是否存在特定值,或者清洗掉缺少关键嵌套字段的数据。
数据结构
{
"id": 55,
"tags": ["vip", "new"],
"profile": {
"age": 25,
"verified": true
}
}
实战操作:提取深层数据
Filter节点本身不支持直接修改数据结构,但它支持读取深层数据。如果你要清洗出“已验证且年龄大于18岁”的用户:
- 路径写法:在Filter条件中,n8n支持点号语法访问深层字段。
- 设置条件:
- Field:
profile.verified-> Value:true - Field:
profile.age-> Operator:>-> Value:18
- Field:
实战操作:数组清洗(高级技巧)
如果你想清洗出“tags”数组中包含“vip”的用户:
- 使用JavaScript表达式模式(点击Filter条件中的“Expression”切换)。
- 输入代码:
{{ $json.tags.includes('vip') }}。 - 如果返回
true,数据通过;false则被丢弃。
硬核提示:当处理数组时,Filter节点的可视化配置可能不够用。此时,善用Expression(表达式)是n8n高手的必备技能。它允许你写纯JS逻辑来处理复杂的数据清洗规则。
FAQ:关于Filter节点的常见疑问
Q1: Filter节点会删除原始数据吗?
A: 不会。n8n的数据流是线性的。Filter节点只是将不符合条件的“数据行”路由到 False 分支,符合的路由到 True 分支。原始数据依然保留在流程中,只是流向不同。
Q2: 如果我有10个过滤条件,都要写在一个Filter节点里吗?
A: 建议逻辑分组。如果条件之间是“且”关系,可以放在一个节点;如果是复杂的嵌套逻辑(如:(A且B) 或 (C且D)),建议拆分为多个Filter节点串联或并联,这样调试起来更直观。
Q3: Filter节点过滤后的数据量,如何统计?
A: 在Filter节点的 True 分支后连接一个 Function 节点,使用 items.length 获取数量,或者直接查看n8n执行日志中的输出条目数。
总结与资源
Filter节点是n8n数据流的“守门员”。掌握它,意味着你不再被动接受脏数据,而是能主动定义数据的标准。从简单的状态判断到复杂的嵌套数组清洗,这三个案例覆盖了80%的日常需求。
如果你在实操中遇到报错,或者有更刁钻的数据清洗场景,欢迎在N8N大学的社区板块发帖,笔者会亲自解答。