n8n Filter节点数据清洗技巧:从混乱数据到结构化输出的3个实战案例

2026-02-24 8 0

笔者按:

大家好,我是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节点:

  1. 输入参数设置:在Filter节点的“Conditions”中,点击“Add Condition”。
  2. 逻辑编写:选择字段 status,操作符选择 is not equal to,值设置为 inactive
  3. 组合逻辑(进阶):如果想同时排除“test”状态,点击“AND”,增加一条 status is not equal to test

避坑点:n8n的Filter对文本大小写敏感。如果你的数据里既有“Active”又有“active”,记得使用内置的 exists 或正则匹配,或者先用JS节点转小写再过滤。

案例二:多重条件筛选与格式修正

场景:你正在监控电商订单。你需要清洗出“金额大于100元”且“支付方式为信用卡”的订单,同时将金额字段格式化为纯数字。

核心挑战

API返回的金额字段通常是字符串(如 "$1,200.00"),直接进行数值比较会失败。我们需要在Filter之前或之后进行清洗。

实战操作

  1. 数据预处理(Set节点):在Filter前加一个Set节点,使用JavaScript表达式清洗金额:
    {{ parseInt($json.price.replace(/[$,]/g, '')) }},并赋值给新字段 clean_price
  2. Filter节点逻辑
    • 条件1:clean_price > 100
    • 条件2:payment_method == credit_card
    • 逻辑关系:选择 AND(必须同时满足)。
  3. 输出验证:连接一个Debug节点,查看输出是否只剩下符合条件的高客单价信用卡订单。

笔者经验:在Filter节点中使用数值比较时,务必确认字段类型。如果输入是字符串"100",比较运算符“大于”可能会按字典序比较,导致结果错误。先用Set节点转为Number是最稳妥的做法。

案例三:处理嵌套对象与数组清洗

场景:这是最硬核的场景。你从API获取了一组数据,其中包含嵌套的JSON对象,或者是一个数组。你需要判断数组中是否存在特定值,或者清洗掉缺少关键嵌套字段的数据。

数据结构

{
"id": 55,
"tags": ["vip", "new"],
"profile": {
"age": 25,
"verified": true
}
}

实战操作:提取深层数据

Filter节点本身不支持直接修改数据结构,但它支持读取深层数据。如果你要清洗出“已验证且年龄大于18岁”的用户:

  1. 路径写法:在Filter条件中,n8n支持点号语法访问深层字段。
  2. 设置条件
    • Field: profile.verified -> Value: true
    • Field: profile.age -> Operator: > -> Value: 18

实战操作:数组清洗(高级技巧)

如果你想清洗出“tags”数组中包含“vip”的用户:

  1. 使用JavaScript表达式模式(点击Filter条件中的“Expression”切换)。
  2. 输入代码:{{ $json.tags.includes('vip') }}
  3. 如果返回 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大学的社区板块发帖,笔者会亲自解答。

相关文章

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

发布评论