n8n If节点条件逻辑分支支持哪些数据类型

2026-02-16 11 0

写在前面:别让“类型不匹配”成为你自动化的绊脚石

笔者在 N8N大学 的社群里潜水时,经常看到新手朋友在调试工作流时发出类似的哀嚎:“明明在 If 节点里写好了判断条件,为什么流程就是走不通?”

点开一看,十有八九是数据类型搞错了。你以为你拿到的是数字 100,实际上它是个字符串 "100";你以为这是个数组对象,结果它只是个孤零零的字符串。

今天,笔者就来硬核拆解一下 n8n 的 If 节点到底“吃”哪些数据类型。搞懂这个,你的自动化逻辑才算真正踩在了坚实的地面上。

If 节点的底层逻辑:一切皆比较

在 n8n 的世界里,If 节点本质上是一个“裁判”。它的工作非常单纯:接收上游节点传来的数据(Item),根据你设定的条件(Condition),判断是走 True 还是 False 的分支。

既然是比较,就离不开“数据类型”。n8n 的 If 节点主要支持以下几大类数据类型作为判断依据:

1. 字符串 (String)

这是最常见的类型,比如用户名、邮件标题、状态码文本等。

  • 支持的操作符: 等于、不等于、包含、不包含、正则匹配、长度判断等。
  • 实战场景: 判断邮件标题是否包含“紧急”二字;判断 API 返回的状态是否为 "success"
  • 笔者提醒: 注意大小写敏感!n8n 默认是区分大小写的,如果你需要忽略大小写,请使用正则匹配模式(Regex)。

2. 数字 (Number)

用于数值比较,比如订单金额、用户 ID、HTTP 状态码等。

  • 支持的操作符: 大于、小于、等于、不等于、范围判断(Between)。
  • 实战场景: 判断订单金额是否大于 1000 元;判断 HTTP 请求返回的状态码是否为 200
  • 避坑点: n8n 很聪明,它能自动识别数字字符串。比如 "500"500 在比较时通常能正确判断,但为了严谨,建议在上游节点(如 Set 节点)明确指定数据类型。

3. 布尔值 (Boolean)

最简单的“是”或“否”,用于二元判断。

  • 支持的操作符: 等于 true、等于 false。
  • 实战场景: 判断用户是否订阅了邮件(true / false);判断某个开关是否开启。

4. 数组 (Array) 与 对象 (Object)

这是新手最容易懵圈的地方。If 节点对复合数据类型的支持相对有限,通常需要配合表达式(Expression)使用。

  • 数组: 你不能直接写 数组 等于 [1,2,3]。通常需要判断数组的长度($items.length),或者使用“包含”操作符判断数组里是否有某个特定元素。
  • 对象: 同样,不能直接比较两个对象是否相等。你需要深入到对象的属性里去比较,例如 {{$json.user.status}} 等于 "active"

5. 日期与时间 (Date)

n8n 支持 ISO 8601 格式的日期字符串(如 2023-10-27T10:00:00Z)。

  • 支持的操作符: 大于、小于、等于(通常用于比较时间先后)。
  • 实战场景: 判断创建时间是否在今天之后;判断任务是否已过期。

实战核心:如何正确使用表达式锁定数据类型

光知道支持哪些类型没用,关键在于你怎么在 If 节点里写代码。n8n 的 If 节点允许你切换输入项为“Expression”(表达式),这是处理复杂类型的关键。

场景一:处理字符串数字

假设 API 返回的金额是字符串格式:"1000"。如果你直接用“数字”类型判断它大于 900,可能会失败。

解决方案: 使用表达式强制转换类型。

在 If 节点条件中选择 Expression,输入:
{{ parseInt($json.amount) > 900 }}

这样你就把字符串变成了整数进行比较,逻辑稳如老狗。

场景二:判断数组是否为空

上游节点返回了一个列表,你想知道它是不是空的。

解决方案: 不要用“等于”去比较一个空数组。判断长度最靠谱。

在 If 节点条件中:
{{ $items.length > 0 }}

如果大于 0,走 True 分支;否则走 False 分支。

场景三:嵌套对象的属性判断

数据结构是这样的: { "user": { "profile": { "level": "VIP" } } }

解决方案: 直接点选或手写路径。

在 If 节点条件中:
{{ $json.user.profile.level === "VIP" }}

注意这里用了全等符号 ===,这是 JavaScript 的严格比较,能避免很多隐式类型转换带来的坑。

高级技巧:Combine Operations (组合操作)

n8n 的 If 节点不仅支持单条件,还支持多条件组合(AND/OR)。这在处理混合数据类型时非常有用。

比如你想判断:用户必须是 VIP(字符串),且积分大于 100(数字)。你可以添加两个条件,并将逻辑设置为 AND

条件字段 数据类型 操作符
{{ $json.user.type }} String 等于 VIP
{{ parseInt($json.score) }} Number 大于 100

只有当两个条件的数据类型都匹配且逻辑成立时,流程才会走通。

常见报错与避坑指南

在 N8N大学 的教学实践中,关于 If 节点数据类型的报错通常集中在以下两点:

1. Null 或 Undefined 报错

当你试图判断一个不存在的字段(例如 {{ $json.not_exist }})时,n8n 会返回 nullundefined

报错现象: 流程卡死或进入错误分支。
解决方案: 使用三元表达式做兜底处理。

{{ $json.status ? $json.status === 'ok' : false }}

意思是:如果 status 存在,判断它是否等于 'ok';如果不存在,直接返回 false。

2. 浮点数精度问题

涉及金额计算时,浮点数的比较是计算机的老大难。

避坑建议: 尽量避免直接比较两个浮点数是否完全相等。如果必须比较,可以先转换为整数(乘以100),或者设置一个极小的误差范围(Epsilon)。

在 n8n 中,最简单的做法是:在 If 节点之前,先用 Code 节点或 Set 节点将金额统一处理为整数(单位:分),然后再进行数字比较。

FAQ:用户常问的 3 个问题

Q1: If 节点支持 JSON 对象直接比较吗?

A: 不支持直接比较。JavaScript 中的两个对象即使内容一样,内存地址不同也会被判定为不相等。你需要比较对象内部的具体属性值。

Q2: 为什么我写的时间比较不准确?

A: 很可能是时区问题。n8n 默认使用 UTC 时间。如果本地时间是字符串格式,建议先用表达式将其转换为时间戳(Timestamp)再进行数字比较,这样最准确。

Q3: If 节点能处理二进制数据(如图片)吗?

A: 不能。If 节点是基于 JSON 数据流进行逻辑判断的。二进制数据通常作为文件流在 workflow 中传递,If 节点无法直接“看”图片内容做判断。你需要先通过 OCR 节点提取文字,再用 If 节点判断文字内容。

总结与资源

理解 n8n If 节点支持的数据类型,本质上是理解 JavaScript 的弱类型特性。记住一句话:在自动化流程中,显式地定义数据类型,永远比依赖隐式转换更安全。

如果你在调试工作流时遇到数据类型导致的逻辑分支错误,不妨回到上游节点,用 Set 节点把数据类型“锁死”,再传给 If 节点。

更多 n8n 硬核实战技巧,请持续关注 N8N大学 (n8ndx.com)。如果你有具体的报错案例,欢迎在评论区留言,笔者会挑选典型问题进行深度解析。

相关文章

n8n Error Handling 节点报错太心烦?试试这些更灵活的替代方案
n8n 节点报错了?用 Error Handling 让它自动重试并通知你
n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决

发布评论