写在前面:别让你的自动化流程变成“垃圾场”
笔者在N8N大学做主编的这几年里,看过太多学员的Workflow。最常犯的一个毛病就是:只管把数据从A点搬到B点,却忘了做“安检”。尤其是处理Webhook、API返回的JSON数据时,成千上万条冗余信息涌进来,如果你不加筛选,下游的数据库、邮件系统迟早会被撑爆。
这就是为什么我们要掌握Filter节点。它不是简单的开关,而是你自动化流水线上的“守门员”。今天,我们就来硬核拆解n8n的Filter节点,从最基础的逻辑判断,到复杂的多条件组合,带你彻底搞定JSON数据过滤。
一、Filter节点到底在干嘛?(大白话版)
在n8n的逻辑里,每个节点输出的都是JSON对象数组。你可以把它想象成Excel表格,每一行是一个数据项,每一列是一个字段。
Filter节点的作用非常纯粹:它只做一件事——判断“真”与“假”。
- 如果条件匹配(True),数据就通过,流向下一个节点。
- 如果条件不匹配(False),数据就被拦截,流程在这里终止。
举个最简单的例子:你抓取了一个网站的RSS订阅源,里面有100篇文章。笔者只想同步那些标题包含“n8n”的文章。Filter节点就会遍历这100条数据,只把符合条件的那几条放行。
二、入门:单条件过滤实战
我们先从最简单的场景入手。假设你有一个HTTP Request节点,获取到了如下JSON数据(模拟API返回):
[
{ "id": 1, "status": "active", "price": 100 },
{ "id": 2, "status": "inactive", "price": 200 },
{ "id": 3, "status": "active", "price": 150 }
]
我们的目标是:只筛选出状态为“active”的数据。
步骤拆解
- 添加 Filter 节点: 在你的流程中,将
Filter节点连接在数据源之后。 - 理解 Condition(条件): 在节点配置中,你会看到“Condition”设置。默认规则是
AND(且),意味着所有条件都必须满足。 - 设置字段与值:
- Field: 输入
status(这是JSON中的键名)。 - Operator: 选择
String->Equals(等于)。 - Value: 输入
active。
- Field: 输入
配置完成后,你会发现只有两条数据通过了节点。这就是最基础的“门卫”工作。
三、进阶:多条件组合与逻辑运算
现实世界的业务逻辑往往没那么单纯。比如,你想筛选出“价格大于100且状态为active”的商品。这时候,单条件就不够用了。
在Filter节点中,你可以通过点击“Add Condition”来添加多条规则,并选择 AND 或 OR 逻辑。
实战案例:处理复杂的JSON结构
假设我们有如下更深层的JSON结构:
[
{ "user": { "role": "admin" }, "amount": 500 },
{ "user": { "role": "user" }, "amount": 1500 }
]
我们需要筛选出“角色是admin且金额大于100”的记录。这里涉及到了嵌套字段的访问。
笔者提示:n8n支持使用点语法(Dot Notation)访问深层字段。
- Field 1:
user.role(注意是点号连接) - Operator:
Equals - Value 1:
admin - Logic (between rules):
AND - Field 2:
amount - Operator:
Number->Greater than - Value 2:
100
通过这种组合,你可以构建出极其精准的数据筛选逻辑,确保只有高质量数据进入后续环节。
四、精通:高级技巧与“脏数据”处理
这是区分新手和高手的关键分水岭。在处理第三方API时,数据格式经常不稳定,甚至字段缺失。如果你的Filter节点配置太死板,流程很容易报错中断。
1. 处理字段不存在的情况(防崩溃)
如果API返回的JSON中偶尔缺少 price 字段,直接使用 price Greater than 100 会导致n8n报错(因为找不到price)。
解决方案: 使用 Exists 操作符。在设置具体数值条件之前,先加一条规则:
- Rule:
price Exists - Logic:
AND
这样,只有包含price字段的数据才会进入下一轮判断,有效防止空指针异常。
2. 正则表达式(Regex)的妙用
当你需要匹配模糊的文本模式时,Contains 可能不够用。比如,你想筛选所有包含“error”或“warning”的日志信息。
在 Operator 中选择 String -> Regex,然后输入模式:
(error|warning)
这将使用正则表达式匹配任何包含“error”或“warning”的文本行,极大地增强了灵活性。
3. 利用 JSON 表达式进行复杂运算
如果内置的操作符无法满足需求,你可以点击 Field 旁边的 Expression 切换器。这里允许你编写 JavaScript 表达式。
例如,你想筛选“当前时间减去创建时间小于24小时”的数据:
{{ new Date().getTime() - new Date($json.created_at).getTime() < 86400000 }}
如果表达式结果为 true,数据通过。这是n8n最强大的地方——它没有限制你的逻辑边界。
五、避坑指南:笔者的经验之谈
在N8N大学的教学案例中,Filter节点的报错率很高,通常不是节点本身的问题,而是数据理解有误。
坑点1:数据类型不匹配
很多API返回的数字是字符串格式(例如 "price": "100")。如果你在Filter中设置 Operator 为 Number -> Greater than,n8n可能会进行隐式转换,但有时会失败。
建议: 当不确定时,统一使用 String 操作符,或者在前一个节点(如Set节点)中显式转换数据类型。
坑点2:Case Sensitive(大小写敏感)
Filter节点默认是严格区分大小写的。如果你的数据是 Active,而你过滤 active,结果是 False。
解决方案: 使用 Regex 模式并加上忽略大小写标志 (?i)active,或者在上游节点将文本统一转为小写。
六、FAQ 常见问题解答
Q1: Filter节点和Switch节点有什么区别?
A: 简单来说,Filter节点是“过滤器”,它决定数据是否通过,通常用于剔除不需要的数据。Switch节点是“分流器”,它根据条件将数据发送到不同的分支路径。如果你只想保留数据,用Filter;如果你想把数据分发到不同的处理逻辑,用Switch。
Q2: 为什么我的Filter节点没有输出任何数据?
A: 这通常是因为条件设置过于严格,或者数据格式与预期不符。建议打开前一个节点的输出,查看具体的JSON结构,确保你的 Field 名称拼写(包括大小写)与JSON键名完全一致。
Q3: Filter节点能否处理数组类型的字段?
A: 可以。你可以使用 Contains 操作符来检查数组中是否包含某个特定值。例如,字段 tags 是 ["n8n", "automation"],你可以设置 tags Contains n8n 来筛选。
总结与资源
掌握 n8n 的 Filter 节点,本质上是掌握数据清洗的逻辑。它让你的自动化流程具备了“思考能力”,不再是盲目的数据搬运工。
从今天起,不要放过任何一条脏数据。在N8N大学,我们始终相信:细节决定自动化的成败。
如果你想了解更多关于 n8n 的高级技巧,欢迎访问我们的官网 n8ndx.com,那里有更多实战案例等着你。