目录

n8n 表达式教程:用 $json、$('节点')、日期和常用函数

表达式可以让节点参数根据数据动态变化。任何参数字段都可以切换到 Expression 模式(字段旁的 Fixed / Expression 切换按钮,或直接输入 {{)。

{{ }} 中写的是 JavaScript,因此可以使用 JavaScript 语法和方法。

读取当前这条数据:$json

{{ $json.name }}
{{ $json.address.city }}
{{ $json.tags[0] }}
{{ $json["字段 名称"] }}

字段名称包含空格或特殊字符时,使用方括号 [...]。

最简单的方法是从左侧的 INPUT 面板将字段拖动到参数中,n8n 会自动生成正确的表达式。

Edit Fields 节点使用表达式生成消息
Edit Fields:将 INPUT 中的字段从左侧拖入表达式,右侧 OUTPUT 会立即显示组合后的消息

读取其他节点的数据:$('节点名称')

$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.modetest(手动测试)或 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日