n8n Filter节点JSON数据过滤:从入门到精通的实用技巧

2026-02-23 10 0

写在前面:别让你的自动化流程变成“垃圾场”

笔者在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”的数据。

步骤拆解

  1. 添加 Filter 节点: 在你的流程中,将 Filter 节点连接在数据源之后。
  2. 理解 Condition(条件): 在节点配置中,你会看到“Condition”设置。默认规则是 AND(且),意味着所有条件都必须满足。
  3. 设置字段与值:
    • Field: 输入 status (这是JSON中的键名)。
    • Operator: 选择 String -> Equals(等于)。
    • Value: 输入 active

配置完成后,你会发现只有两条数据通过了节点。这就是最基础的“门卫”工作。

三、进阶:多条件组合与逻辑运算

现实世界的业务逻辑往往没那么单纯。比如,你想筛选出“价格大于100且状态为active”的商品。这时候,单条件就不够用了。

在Filter节点中,你可以通过点击“Add Condition”来添加多条规则,并选择 ANDOR 逻辑。

实战案例:处理复杂的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,那里有更多实战案例等着你。

相关文章

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

发布评论