n8n Filter节点报错?可能是JSON路径没写对

2026-02-22 31 0

问题复现:为什么我的 Filter 节点总是报错?

笔者在 N8N 大学的社群里,几乎每天都能看到新手在问同一个问题:“为什么我的 Filter 节点明明逻辑是对的,却一直报错?”

通常,你看到的报错信息可能是这样的:

Error: The expression isn't valid:
$json.someField is undefined

或者更隐蔽一点,节点没有报红,但就是无法通过数据,导致整个自动化流程“卡死”。这种时候,90% 的情况都不是 Filter 节点本身的逻辑问题,而是你引用的 JSON 路径 写错了。

在 n8n 中,数据是以 JSON 格式在节点间流转的。Filter 节点就像一个守门员,它需要精确地知道你要检查哪个字段。如果路径指错了,它自然找不到数据,也就无法进行判断。

原因分析:为什么 JSON 路径这么容易写错?

用大白话来说,n8n 的数据结构就像一个层层嵌套的快递箱。最外层是 $json,里面装着你接收到的具体数据。

笔者总结了三个最常见的“坑”:

  1. 层级搞混: 你以为数据在第一层,其实它藏在 dataresult 里面。
  2. 拼写错误: 字段名大小写不一致,或者多打了一个空格(比如 User IDuser_id)。
  3. 数组处理不当: 遇到列表数据(如多个订单),直接用点语法访问,导致 n8n 无法识别。

如果不解决路径问题,你的自动化流程就像断了线的风筝,根本跑不起来。

解决方案:3 招搞定 Filter 节点路径

别急,下面笔者教你三种方法,从简单到硬核,彻底解决这个问题。

方法一:善用“小铅笔”图标,让 n8n 帮你写

很多新手喜欢手动敲代码,其实 n8n 已经内置了可视化工具。

  1. 打开 Filter 节点。
  2. 在 Rules 区域,点击 Value 输入框旁边的小铅笔图标(Edit expression)。
  3. 在弹出的面板左侧,你会看到 Input Data 树状图。这里展示了上一个节点传过来的所有数据。
  4. 直接点击你需要的字段(比如 user -> email),n8n 会自动生成正确的路径 {{ $json.user.email }}

笔者建议: 除非你对路径非常熟悉,否则永远优先使用这个方法,能避免 90% 的拼写错误。

方法二:理解“数组”与“对象”的区别

这是最让新手头疼的地方。如果你的数据是一个列表(Array),比如:

[
  {"id": 1, "name": "Alice"},
  {"id": 2, "name": "Bob"}
]

直接写 $json.id 是取不到值的,因为 n8n 不知道你要取第几个。

  • 如果要在 Filter 中判断: 通常需要配合 Split Out(拆分)节点,先把数组拆成单条数据,再进入 Filter 节点。
  • 如果只是简单的包含判断: 可以使用 .length 属性,例如 {{ $json.items.length }} 来判断列表是否为空。

方法三:使用 JavaScript 表达式进行兜底

当简单的路径判断无法满足需求时,你可以切回“Expression”模式,写一段简单的 JS 逻辑。

比如,你想判断一个字段是否存在,或者防止字段为空时报错:

{{ $json.user && $json.user.status === 'active' }}

这种写法比单纯的 $json.user.status == 'active' 更健壮。如果 user 不存在,代码不会报错,而是直接返回 false,流程会继续运行。

预防措施:养成良好的调试习惯

为了避免下次再踩坑,笔者建议你在日常开发中养成两个习惯:

  1. 善用“Debug”节点: 在 Filter 节点之前,插入一个 Function 节点或 No-Op 节点,运行一次工作流,查看完整的 JSON 输出。确认字段路径完全正确后,再配置 Filter。
  2. 测试数据要真实: n8n 的“Test”按钮有时会使用模拟数据。如果模拟数据结构和真实数据不一致,Filter 就会失效。尽量使用真实数据触发工作流进行测试。

记住,自动化不是一蹴而就的,耐心调试每一个细节,才能让工作流稳定运行。

FAQ:关于 Filter 节点的常见问题

1. Filter 节点支持中文字段名吗?
支持。但如果你的字段名包含空格或特殊字符,必须使用中括号语法访问。例如:{{ $json['用户姓名'] }}

2. 为什么我的路径明明是对的,还是报错?
检查数据类型。如果你的字段是数字,但你用了字符串比较(比如 '123' == 123),虽然 JS 会隐式转换,但在 n8n 中最好保持类型一致。或者,数据可能是 nullundefined,导致访问子属性时报错。

3. Filter 节点能处理复杂的嵌套逻辑吗?
可以。在 Rules 设置中,你可以选择“AND”或“OR”逻辑来组合多个条件。如果条件极其复杂,建议使用 Code 节点(JavaScript)来替代 Filter 节点,这样逻辑更清晰。

总结与资源

Filter 节点报错,十有八九是 JSON 路径没写对。掌握 可视化编辑器 的使用,理解 数组与对象 的区别,是避免踩坑的关键。

在 N8N 大学,我们不仅教你如何使用工具,更教你如何像开发者一样思考。如果你在 n8n 的使用过程中遇到任何疑难杂症,欢迎访问我们的官网 n8ndx.com 获取更多实战教程。

相关文章

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

发布评论