n8n Filter 节点 API 响应处理:如何优雅地处理嵌套数据与状态码

2026-02-23 8 0

场景导入:别让你的自动化流程变成“数据垃圾场”

笔者在 N8N大学 混迹多年,见过太多新手同学把 n8n 用成了“数据搬运工”。当你直接把 HTTP Request 节点的响应扔给下一个节点时,你其实在埋雷。

API 返回的数据往往像俄罗斯套娃,层层嵌套;HTTP 状态码更是个“变色龙”,200、201、429、500 混杂在一起。如果你不懂得如何“优雅”地过滤和处理这些数据,你的自动化流程要么在某个节点突然崩溃,要么悄无声息地吞掉错误。

今天,作为你的引路人,笔者将带你手撕 n8n Filter 节点,教你如何精准提取嵌套数据,并冷静应对各种状态码。这不仅仅是技术操作,更是工程思维的升级。

核心实操:三步搞定数据清洗与状态拦截

在 n8n 的世界里,Filter 节点不是简单的开关,它是你工作流的“安检员”。我们以一个常见的场景为例:请求一个分页列表 API,数据藏在深层,且需要分辨成功与否。

第一步:理解 Filter 节点的逻辑引擎

不同于其他工具的简单布尔判断,n8n 的 Filter 节点允许你编写 JavaScript 表达式。这是它的灵魂所在。

在节点配置中,你会看到“Rules”区域。你可以添加多个条件,逻辑关系可以是 AND(与)或 OR(或)。对于复杂的数据处理,笔者建议直接使用 JS 表达式 模式,它能处理更复杂的逻辑。

第二步:优雅地挖掘嵌套数据

假设 API 返回如下结构:

{ "code": 200, "data": { "list": [ { "id": 1, "name": "Test" } ] } }

你的目标是提取 data.list。如果你直接在 HTTP Request 后面接一个 Set 节点,可能会遇到 undefined 的尴尬。

操作步骤:

  1. HTTP Request 节点后添加 Filter 节点。
  2. 将 Filter 的 Keep(保留)设置为 Items Matching Condition
  3. 在表达式框中输入:{{ $json.data.list.length > 0 }}
  4. 这确保了只有当列表不为空时,流程才继续。这一步避免了空数据污染后续流程。

如果你需要将嵌套的数组“打平”(Flatten),可以使用 Set 节点配合 {{ $json.data.list }} 作为输出,或者使用 Split Out 节点。但在 Filter 阶段,我们主要做的是“存在性验证”。

第三步:基于状态码的路由与拦截

这是处理 API 响应最关键的一步。很多 API 返回 200 OK,但 body 里却写着 {"error": "Something went wrong"}。我们需要区分“HTTP 状态”和“业务状态”。

1. 拦截 HTTP 错误状态码:

n8n 的 HTTP Request 节点有一个设置叫 Full Response。开启后,你可以获取到 statusCode

在 Filter 节点中,我们可以这样写:

{{ $json.statusCode === 200 }}

如果条件不满足,n8n 默认会走红色的“False”出口。你可以连接一个 Email 节点或 Slack 节点来报警。

2. 拦截业务错误码:

回到上面的例子,业务码在 body 里:

{{ $json.code === 200 }}

如果业务码不是 200,我们可以利用 Filter 的多出口特性(True/False),将错误数据导向一个清理节点,或者直接终止流程。

笔者的实战技巧: 将“HTTP 429 限流”单独处理。在 Filter 中判断 $json.statusCode === 429,如果成立,不要直接失败,而是连接一个 Wait 节点等待 10 秒,然后重试。这能极大提升流程的稳定性。

避坑指南:这些细节让你少走弯路

在 N8N大学 的社区里,关于 Filter 节点的吐槽通常集中在以下两点:

  1. 数据类型陷阱: n8n 的表达式非常灵活,但全等(===)和双等(==)的区别依然致命。如果你的 API 返回 "code": "200" (字符串) 却用 === 200 (数字) 判断,结果永远是 False。记得用 Number($json.code) === 200 或者直接比较字符串。
  2. 空值报错: 当你访问深层嵌套属性如 $json.data.list[0].id 时,如果 list 是空的,表达式会报错。务必使用可选链操作符:$json.data?.list?.[0]?.id。这能保护你的流程不因数据缺失而崩溃。

FAQ 问答:你可能遇到的疑惑

Q1: Filter 节点会删除数据吗?
A: 不会。它只是决定数据流的走向。被过滤掉的数据会从“False”出口流出,你可以连接其他节点处理它们,而不是直接丢弃。

Q2: 我想同时判断多个条件,怎么写?
A: 在表达式中使用逻辑运算符。例如:{{ $json.statusCode === 200 && $json.data.list.length > 0 }}。这表示只有 HTTP 成功且列表不为空才继续。

Q3: 如果 API 返回的 JSON 结构不固定怎么办?
A: 这是 API 对接的常见问题。在 Filter 之前,可以加一个 Function 节点,用 JS 代码给缺失的字段赋默认值(如 null 或空数组),然后再进入 Filter 逻辑。这能强制统一数据结构。

总结与资源

处理 API 响应时,Filter 节点是你最可靠的守门员。它不仅能过滤噪音,还能通过多出口逻辑实现复杂的错误处理和重试机制。记住,健壮的自动化不在于流程跑得多快,而在于面对异常数据时能有多稳。

如果你想深入学习 n8n 的更多高级技巧,欢迎访问 N8N大学 (n8ndx.com)。这里没有枯燥的文档复读,只有硬核的实战经验。保持探索,保持自动化。

相关文章

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

发布评论