问题复现:为什么我的 Filter 节点总是报错?
笔者在 N8N 大学的社群里,几乎每天都能看到新手在问同一个问题:“为什么我的 Filter 节点明明逻辑是对的,却一直报错?”
通常,你看到的报错信息可能是这样的:
Error: The expression isn't valid:
$json.someField is undefined
或者更隐蔽一点,节点没有报红,但就是无法通过数据,导致整个自动化流程“卡死”。这种时候,90% 的情况都不是 Filter 节点本身的逻辑问题,而是你引用的 JSON 路径 写错了。
在 n8n 中,数据是以 JSON 格式在节点间流转的。Filter 节点就像一个守门员,它需要精确地知道你要检查哪个字段。如果路径指错了,它自然找不到数据,也就无法进行判断。
原因分析:为什么 JSON 路径这么容易写错?
用大白话来说,n8n 的数据结构就像一个层层嵌套的快递箱。最外层是 $json,里面装着你接收到的具体数据。
笔者总结了三个最常见的“坑”:
- 层级搞混: 你以为数据在第一层,其实它藏在
data或result里面。 - 拼写错误: 字段名大小写不一致,或者多打了一个空格(比如
User ID和user_id)。 - 数组处理不当: 遇到列表数据(如多个订单),直接用点语法访问,导致 n8n 无法识别。
如果不解决路径问题,你的自动化流程就像断了线的风筝,根本跑不起来。
解决方案:3 招搞定 Filter 节点路径
别急,下面笔者教你三种方法,从简单到硬核,彻底解决这个问题。
方法一:善用“小铅笔”图标,让 n8n 帮你写
很多新手喜欢手动敲代码,其实 n8n 已经内置了可视化工具。
- 打开 Filter 节点。
- 在 Rules 区域,点击 Value 输入框旁边的小铅笔图标(Edit expression)。
- 在弹出的面板左侧,你会看到 Input Data 树状图。这里展示了上一个节点传过来的所有数据。
- 直接点击你需要的字段(比如
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,流程会继续运行。
预防措施:养成良好的调试习惯
为了避免下次再踩坑,笔者建议你在日常开发中养成两个习惯:
- 善用“Debug”节点: 在 Filter 节点之前,插入一个 Function 节点或 No-Op 节点,运行一次工作流,查看完整的 JSON 输出。确认字段路径完全正确后,再配置 Filter。
- 测试数据要真实: n8n 的“Test”按钮有时会使用模拟数据。如果模拟数据结构和真实数据不一致,Filter 就会失效。尽量使用真实数据触发工作流进行测试。
记住,自动化不是一蹴而就的,耐心调试每一个细节,才能让工作流稳定运行。
FAQ:关于 Filter 节点的常见问题
1. Filter 节点支持中文字段名吗?
支持。但如果你的字段名包含空格或特殊字符,必须使用中括号语法访问。例如:{{ $json['用户姓名'] }}。
2. 为什么我的路径明明是对的,还是报错?
检查数据类型。如果你的字段是数字,但你用了字符串比较(比如 '123' == 123),虽然 JS 会隐式转换,但在 n8n 中最好保持类型一致。或者,数据可能是 null 或 undefined,导致访问子属性时报错。
3. Filter 节点能处理复杂的嵌套逻辑吗?
可以。在 Rules 设置中,你可以选择“AND”或“OR”逻辑来组合多个条件。如果条件极其复杂,建议使用 Code 节点(JavaScript)来替代 Filter 节点,这样逻辑更清晰。
总结与资源
Filter 节点报错,十有八九是 JSON 路径没写对。掌握 可视化编辑器 的使用,理解 数组与对象 的区别,是避免踩坑的关键。
在 N8N 大学,我们不仅教你如何使用工具,更教你如何像开发者一样思考。如果你在 n8n 的使用过程中遇到任何疑难杂症,欢迎访问我们的官网 n8ndx.com 获取更多实战教程。