你是否有面对n8n的数据流抓狂的经历。明明数据就在那里,却怎么也提取不出来。
嵌套了三层的JSON数据像迷宫,你试了十几个节点还是无法取出那个该死的字段。更崩溃的是,老板明早8点要看报表。这种无力感,像极了明明有一把钥匙,却怎么也打不开眼前的锁。

第一关:新手村必备技能(看完就能用)
别被"表达式"这三个字吓到。其实它就像游戏里的快捷键,学会了能让你事半功倍。
1. 获取数据:{{$json.字段名}}
小白理解:就像从包裹里拿东西,$json是包裹,字段名是你要的物品。
实际场景:
-
• 获取用户名: {{$json.username}} -
• 获取邮箱: {{$json.email}} -
• 获取订单号: {{$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个节点才能实现的功能,现在一个表达式就搞定。
但更重要的是,你获得了一种全新的思维方式——不再是工具的奴隶,而是数据的主人。
下一步:
-
1. 打开n8n,找一个简单的流程 -
2. 尝试用表达式替代2-3个节点 -
3. 感受效率提升的快感
记住:高手和小白的区别,往往就是一个表达式的距离。

