链载Ai

标题: n8n邪修指南:小白与高手的差距,只缺这份动态表达式避坑指南 [打印本页]

作者: 链载Ai    时间: 昨天 22:04
标题: n8n邪修指南:小白与高手的差距,只缺这份动态表达式避坑指南

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">你是否有面对n8n的数据流抓狂的经历。明明数据就在那里,却怎么也提取不出来。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">嵌套了三层的JSON数据像迷宫,你试了十几个节点还是无法取出那个该死的字段。更崩溃的是,老板明早8点要看报表。这种无力感,像极了明明有一把钥匙,却怎么也打不开眼前的锁。

今天,我要把压箱底的技能全部交给你——n8n动态表达式的完整攻略。不是那种官方文档式的枯燥说教,而是20+个能立即解决你实际问题的表达式,外加我踩过的所有坑。
ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;color: rgb(63, 63, 63);">ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;height: auto !important;" title="null" src="https://api.ibos.cn/v4/weapparticle/accesswximg?aid=121751&url=aHR0cHM6Ly9tbWJpei5xcGljLmNuL3N6X21tYml6X3BuZy95akl0WG9YZDA2SG9waWNleVliemlhbGRXWG9rcERsd1hXeWljOWhxQ2Y1eGljaFA0THFPeVVwdlJoZVZMOEJEVkhBMjdjQXlLV1ZUdk1MMnJpYVM5cE0yYkhBLzY0MD93eF9mbXQ9cG5nJmFtcA==;from=appmsg"/>

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;padding-left: 12px;color: rgb(63, 63, 63);">第一关:新手村必备技能(看完就能用)

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">别被"表达式"这三个字吓到。其实它就像游戏里的快捷键,学会了能让你事半功倍。

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;color: rgb(250, 81, 81);">1. 获取数据:ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 15.84px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">{{$json.字段名}}

ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">ingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: inherit;color: rgb(250, 81, 81);">小白理解:就像从包裹里拿东西,$json是包裹,字段名是你要的物品。

实际场景

踩坑警告:字段名必须一模一样!usernameuserName是两个完全不同的东西。我曾因为一个大写字母debug了半小时...

2. 拼接文字:{{'文字' + $json.字段}}

现实用途:给用户发个性化消息

直接上例子

{{'你好,' + $json.name + '同学'}}
// 结果:你好,小明同学

进阶玩法:用反引号更简洁

{{`你好,${$json.name}同学`}}
// 效果一样,但更优雅

3. 计算数字:直接写算式

使用场景:算价格、算折扣、算提成

实用示例

4. 设置默认值:{{$json.字段 || '默认值'}}

痛点解决:防止数据缺失导致流程崩溃

救命示例

{{$json.nickname || '匿名用户'}}
// 如果没有昵称,就显示"匿名用户"

专家提示:这个小技巧能让你的工作流稳定性提升90%。养成习惯,你会感谢自己的。

5. 获取当前序号:{{$itemIndex}}

应用场景:批量处理时显示进度

实战案例

{{'正在处理第' + ($itemIndex + 1) + '个订单'}}
// 注意要+1,因为序号从0开始

第二关:进阶技巧(让你效率翻倍)

掌握了基础,现在来点能让同事惊呼"卧槽"的技巧。

文字处理三板斧

1. 转大小写

{{$json.code.toUpperCase()}}  // 转大写:abc → ABC
{{$json.code.toLowerCase()}} // 转小写:ABC → abc

使用场景:处理验证码、统一格式

2. 去空格

{{$json.input.trim()}}
// " 你好 " → "你好"

使用场景:清理用户输入,避免因为空格导致匹配失败

3. 替换内容

{{$json.content.replace('旧词', '新词')}}
// 把文章中的"旧词"全部换成"新词"

使用场景:批量修改文案、屏蔽敏感词

数组操作(处理列表数据)

4. 数组长度

{{$json.items.length}}
// 获取列表有多少项

使用场景:统计订单商品数、计算参与人数

5. 数组转文字

{{$json.tags.join('、')}}
// ['游戏', '动漫', '科技'] → "游戏、动漫、科技"

使用场景:显示用户标签、生成关键词

6. 检查包含

{{$json.hobbies.includes('游戏')}}
// 返回 true 或 false

使用场景:判断用户兴趣、筛选目标人群

条件判断(最强大的功能)

7. 三元运算(简化版if)

{{$json.age>=18?'成年':'未成年'}}

翻译成人话:如果年龄>=18,显示"成年",否则显示"未成年"

更复杂的例子

{{$json.score>=90?'优秀'json.score>=60?'及格':'不及格'}}

这一行代码,替代了3个IF节点!

第三关:高手秘籍(掌握这些你就是大神)

这部分内容,是区分小白和高手的分水岭。但别怕,我会用最简单的方式讲清楚。

时间处理(n8n内置了超强的时间库)

1. 获取当前时间

{{$now}}              // 当前时间
{{$now.toFormat('yyyy-MM-dd')}} // 格式化:2024-03-15
{{$now.toFormat('HH:mm:ss')}} // 格式化:14:30:00

2. 时间计算

{{$now.plus({days: 7})}}     // 7天后
{{$now.minus({hours: 2})}} // 2小时前

实战案例:自动设置过期时间

{{$now.plus({days: 30}).toFormat('yyyy-MM-dd')}}
// 30天后的日期,用于设置会员到期时间

深层数据提取(对付复杂JSON)

3. 安全访问深层数据

{{$json.user?.profile?.avatar}}

解释:即使user或profile不存在也不会报错,这个?.太救命了!

4. 复杂查询(JMESPath)

{{$jmespath($json, 'users[0].name')}}
// 获取第一个用户的名字

适用场景:数据嵌套很深,普通方法搞不定时

多行代码(终极大招)

5. 复杂逻辑处理

{{(() => {
const price = $json.price;
const vip = $json.isVip;

if (vip && price > 100) {
return price * 0.7; // VIP且满100打7折
} else if (vip) {
return price * 0.9; // VIP打9折
} else {
return price; // 原价
}
})()}}
看起来复杂?其实就是把多个判断写在一起,避免创建一堆节点。

第四关:血泪教训(帮你避坑)

每一个坑,都是真金白银换来的教训。

巨坑一:数据类型混乱

问题:明明是数字10,加5变成了"105"

// 错误
{{$json.count + 5}} // "10" + 5 = "105"

// 正确
{{Number($json.count) + 5}} // 10 + 5 = 15

巨坑二:空值炸弹

问题:某个字段为空,整个流程崩溃

// 危险写法
{{$json.user.name}}

// 安全写法
{{$json.user?.name || '匿名'}}

巨坑三:性能黑洞

问题:处理大量数据时卡死

// 表达式处理1000条数据会很慢
// 解决:大数据请用Code节点,不要硬上表达式

额外福利:5个立即能用的表达式

  1. 1.生成随机ID{{'ORDER' + Date.now()}}
  2. 2.隐藏手机号{{$json.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')}}
  3. 3.计算折扣力度{{Math.round((1 - $json.salePrice / $json.originalPrice) * 100) + '%'}}
  4. 4.智能截取文字{{$json.text.length > 20 ? $json.text.slice(0, 20) + '...' : $json.text}}
  5. 5.批量生成标签{{$json.keywords.split(',').map(k => '#' + k.trim()).join(' ')}}

从小白到高手的蜕变

现在,你已经掌握了n8n表达式的核心技能。那些曾经需要拖拽10个节点才能实现的功能,现在一个表达式就搞定。

但更重要的是,你获得了一种全新的思维方式——不再是工具的奴隶,而是数据的主人。

下一步:

  1. 1. 打开n8n,找一个简单的流程
  2. 2. 尝试用表达式替代2-3个节点
  3. 3. 感受效率提升的快感

记住:高手和小白的区别,往往就是一个表达式的距离。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5