目录
n8n 表达式教程:用 $json、$('节点')、日期和常用函数
表达式可以让节点参数根据数据动态变化。任何参数字段都可以切换到 Expression 模式(字段旁的 Fixed / Expression 切换按钮,或直接输入 {{)。
{{ }} 中写的是 JavaScript,因此可以使用 JavaScript 语法和方法。
读取当前这条数据:$json
{{ $json.name }}
{{ $json.address.city }}
{{ $json.tags[0] }}
{{ $json["字段 名称"] }}
字段名称包含空格或特殊字符时,使用方括号 [...]。
最简单的方法是从左侧的 INPUT 面板将字段拖动到参数中,n8n 会自动生成正确的表达式。

读取其他节点的数据:$('节点名称')
$json 只能读取上一个节点的输出。要读取更早的节点:
{{ $('Google Sheets').item.json.email }}
| 写法 | 含义 |
|---|---|
$('节点').item | 与当前这条数据对应的数据(最常用) |
$('节点').first() | 该节点输出的第一条数据 |
$('节点').last() | 最后一条数据 |
$('节点').all() | 所有 items(数组) |
{{ $('Webhook').item.json.body.customer_id }}
{{ $('获取设置').first().json.api_url }}
{{ $('订单').all().length }} 条订单
节点名称更改后,表达式中的名称也会由 n8n 自动更新。
字符串处理
{{ $json.name.trim() }}
{{ $json.email.toLowerCase() }}
{{ $json.title.slice(0, 50) }}…
{{ $json.text.replaceAll('\n', ' ') }}
{{ `您好 ${$json.name},您的订单 ${$json.order_id} 已发货。` }}
{{ $json.tags.join('、') }}
n8n 还提供了一些额外方法:
{{ $json.email.isEmail() }}
{{ $json.content.extractUrl() }}
{{ $json.title.toTitleCase() }}
数字
{{ $json.price * 1.05 }}
{{ Math.round($json.score * 10) / 10 }}
{{ Number($json.amount).toLocaleString('zh-TW') }}
{{ ($json.done / $json.total * 100).toFixed(1) }}%
API 返回的数字有时是字符串,计算前先用 Number() 转换。
条件判断
{{ $json.amount > 1000 ? 'VIP' : '普通' }}
{{ $json.nickname || $json.name }}
{{ $json.phone ?? '未提供' }}
需要根据条件走不同流程时,使用 If 或 Switch 节点,而不是在表达式中处理。
数组
{{ $json.items.length }}
{{ $json.items.map(i => i.name).join(', ') }}
{{ $json.items.filter(i => i.stock === 0).length }}
{{ $json.scores.reduce((a, b) => a + b, 0) }}
日期和时间
n8n 内置 Luxon 日期库,$now 表示当前时间,$today 表示今天零点:
{{ $now.toFormat('yyyy-MM-dd HH:mm') }}
{{ $today.minus({ days: 1 }).toFormat('yyyy/MM/dd') }}
{{ $now.plus({ hours: 2 }).toISO() }}
{{ $now.setZone('Asia/Taipei').toFormat('MM月dd日 HH:mm') }}
{{ $now.weekday }} // 1 = 星期一 … 7 = 星期日
解析数据中的日期字符串:
{{ DateTime.fromISO($json.created_at).toFormat('yyyy-MM-dd') }}
{{ DateTime.fromFormat($json.date, 'yyyy/MM/dd').plus({ days: 7 }).toISODate() }}
{{ $json.created_at.toDateTime().diffTo($now, 'days') }}
时区以 n8n 或工作流的时区设置为准,记得设置为 Asia/Taipei。
常用内置变量
| 变量 | 内容 |
|---|---|
$json | 当前这条数据 |
$binary | 当前这条数据中的文件 |
$input.all() | 此节点收到的所有 items |
$now、$today | 当前时间、今天 |
$execution.id | 本次执行的 ID |
$execution.mode | test(手动测试)或 production |
$workflow.name | 工作流名称 |
$vars.名称 | 自定义变量(部分方案提供) |
$runIndex | 节点在本次执行中运行的次数 |
多行和复杂逻辑
可以在表达式中编写立即调用的函数:
{{ (() => {
const total = $json.items.reduce((s, i) => s + i.price * i.qty, 0);
return total >= 1000 ? total : total + 60;
})() }}
但逻辑一旦超过几行,建议改用代码节点,这样更易阅读和调试。
调试技巧
- 表达式字段下方会实时显示预览结果,红色表示错误。
- 预览使用上一次运行的数据,先运行前面的节点才能看到预览。
Cannot read properties of undefined表示路径中某一层不存在,可以用?.避免错误:{{ $json.address?.city }}。- 想查看整条数据:
{{ JSON.stringify($json) }}。
更新于 2026年10月12日