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.email}}{{$json.orderId}}踩坑警告:字段名必须一模一样!username和userName是两个完全不同的东西。我曾因为一个大写字母debug了半小时...
{{'文字' + $json.字段}}现实用途:给用户发个性化消息
直接上例子:
{{'你好,' + $json.name + '同学'}}
// 结果:你好,小明同学进阶玩法:用反引号更简洁
{{`你好,${$json.name}同学`}}
// 效果一样,但更优雅使用场景:算价格、算折扣、算提成
实用示例:
{{$json.price * 0.8}}{{$json.price + 10}}{{$json.sales * 0.1}}{{$json.字段 || '默认值'}}痛点解决:防止数据缺失导致流程崩溃
救命示例:
{{$json.nickname || '匿名用户'}}
// 如果没有昵称,就显示"匿名用户"专家提示:这个小技巧能让你的工作流稳定性提升90%。养成习惯,你会感谢自己的。
{{$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节点!
这部分内容,是区分小白和高手的分水岭。但别怕,我会用最简单的方式讲清楚。
1. 获取当前时间
{{$now}} // 当前时间
{{$now.toFormat('yyyy-MM-dd')}} // 格式化:2024-03-15
{{$now.toFormat('HH:mm:ss')}} // 格式化:14:30:002. 时间计算
{{$now.plus({days: 7})}} // 7天后
{{$now.minus({hours: 2})}} // 2小时前实战案例:自动设置过期时间
{{$now.plus({days: 30}).toFormat('yyyy-MM-dd')}}
// 30天后的日期,用于设置会员到期时间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节点,不要硬上表达式{{'ORDER' + Date.now()}}{{$json.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')}}{{Math.round((1 - $json.salePrice / $json.originalPrice) * 100) + '%'}}{{$json.text.length > 20 ? $json.text.slice(0, 20) + '...' : $json.text}}{{$json.keywords.split(',').map(k => '#' + k.trim()).join(' ')}}现在,你已经掌握了n8n表达式的核心技能。那些曾经需要拖拽10个节点才能实现的功能,现在一个表达式就搞定。
但更重要的是,你获得了一种全新的思维方式——不再是工具的奴隶,而是数据的主人。
下一步:
记住:高手和小白的区别,往往就是一个表达式的距离。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |