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是包裹,字段名是你要的物品。实际场景: - • 获取用户名:
{{$json.username}} - • 获取订单号:
{{$json.orderId}}
踩坑警告:字段名必须一模一样!username和userName是两个完全不同的东西。我曾因为一个大写字母debug了半小时... 2. 拼接文字:{{'文字' + $json.字段}}现实用途:给用户发个性化消息 直接上例子: {{'你好,' + $json.name + '同学'}} // 结果:你好,小明同学
进阶玩法:用反引号更简洁 {{`你好,${$json.name}同学`}} // 效果一样,但更优雅
3. 计算数字:直接写算式使用场景:算价格、算折扣、算提成 实用示例: - • 打8折:
{{$json.price * 0.8}} - • 加运费:
{{$json.price + 10}} - • 算提成:
{{$json.sales * 0.1}}
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.生成随机ID:
{{'ORDER' + Date.now()}} - 2.隐藏手机号:
{{$json.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')}} - 3.计算折扣力度:
{{Math.round((1 - $json.salePrice / $json.originalPrice) * 100) + '%'}} - 4.智能截取文字:
{{$json.text.length > 20 ? $json.text.slice(0, 20) + '...' : $json.text}} - 5.批量生成标签:
{{$json.keywords.split(',').map(k => '#' + k.trim()).join(' ')}}
从小白到高手的蜕变现在,你已经掌握了n8n表达式的核心技能。那些曾经需要拖拽10个节点才能实现的功能,现在一个表达式就搞定。 但更重要的是,你获得了一种全新的思维方式——不再是工具的奴隶,而是数据的主人。 下一步:
记住:高手和小白的区别,往往就是一个表达式的距离。 |