n8n Expression 語法速查表:常用寫法一次整理(2026)
整理 n8n Expression 常用語法,包含 $json 取值、日期處理、字串操作、條件判斷,附可下載速查表,寫 workflow 再也不用 Google。
n8n 的 Expression 就是你在節點參數裡面寫的那些 {{ }} 東西。白話版:它讓你在節點裡動態抓資料,不用寫死。
這篇把常用的 Expression 語法整理成速查表,下次寫 workflow 直接來查就好。
Expression 是什麼?用一句話解釋
Expression 是 n8n 裡面的小型 JavaScript 片段,寫在 {{ }} 裡面。它的工作就是:幫你從前面的節點抓資料過來用。
舉個例子,你在 Gmail 節點要寄信,收件人不想寫死,想用前一個節點回傳的 email 欄位——這時候你就寫:
{{ $json.email }}
就這樣,n8n 會自動把前面節點的 email 值抓過來。
不囉唆,直接看怎麼用。
基本語法:{{ $json.xxx }}
這是你最常用到的寫法。$json 代表「前一個節點傳過來的資料」。
| 語法 | 意思 | 範例 |
|---|---|---|
{{ $json.fieldName }} | 取得欄位值 | {{ $json.name }} → "小明" |
{{ $json.nested.field }} | 取得巢狀欄位 | {{ $json.user.email }} → "[email protected]" |
{{ $json["field name"] }} | 欄位名有空格時 | {{ $json["First Name"] }} → "小明" |
{{ $json.array[0] }} | 取陣列第一個值 | {{ $json.tags[0] }} → "n8n" |
重點:指定從哪個節點抓資料
預設 $json 是抓前一個節點的資料。如果你要抓更前面的特定節點:
{{ $('節點名稱').item.json.fieldName }}
例如你想抓「HTTP Request」節點的回傳值:
{{ $('HTTP Request').item.json.data.title }}
實測過的,放心用。節點名稱要跟 workflow 裡面的名字完全一樣(含大小寫)。
常用 Expression 速查表
數字處理
| 需求 | Expression | 結果 |
|---|---|---|
| 四捨五入 | {{ $json.price.toFixed(2) }} | "99.50" |
| 取整數(無條件捨去) | {{ Math.floor($json.price) }} | 99 |
| 取整數(無條件進位) | {{ Math.ceil($json.price) }} | 100 |
| 數字轉字串 | {{ $json.count.toString() }} | "42" |
| 字串轉數字 | {{ Number($json.amount) }} | 42 |
| 算百分比 | {{ ($json.done / $json.total * 100).toFixed(1) }} | "85.7" |
日期處理
n8n 內建 Luxon 日期處理函式庫,用 $now 和 $today 取得目前時間。
| 需求 | Expression | 結果範例 |
|---|---|---|
| 現在時間(ISO 格式) | {{ $now.toISO() }} | "2026-03-26T14:30:00.000+08:00" |
| 只要日期 | {{ $now.toISODate() }} | "2026-03-26" |
| 格式化日期 | {{ $now.toFormat('yyyy/MM/dd') }} | "2026/03/26" |
| 格式化含時間 | {{ $now.toFormat('yyyy-MM-dd HH:mm') }} | "2026-03-26 14:30" |
| 加 7 天 | {{ $now.plus({days: 7}).toISODate() }} | "2026-04-02" |
| 減 1 個月 | {{ $now.minus({months: 1}).toISODate() }} | "2026-02-26" |
| 取得星期幾 | {{ $now.weekdayLong }} | "Thursday" |
| 今天的開始(00:00) | {{ $today.toISO() }} | "2026-03-26T00:00:00.000+08:00" |
| 兩個日期相差天數 | {{ $now.diff($today, 'days').days }} | 天數差 |
白話版:
$now就是現在幾點幾分,$today就是今天凌晨零點。加減時間用.plus()和.minus()。
字串處理
| 需求 | Expression | 結果 |
|---|---|---|
| 轉大寫 | {{ $json.name.toUpperCase() }} | "HELLO" |
| 轉小寫 | {{ $json.name.toLowerCase() }} | "hello" |
| 取代文字 | {{ $json.text.replace('舊', '新') }} | 替換後的字串 |
| 去頭尾空白 | {{ $json.input.trim() }} | 無前後空白 |
| 取前 N 個字 | {{ $json.title.slice(0, 50) }} | 前 50 個字元 |
| 拼接字串 | {{ $json.first + ' ' + $json.last }} | "小 明" |
| 包含判斷 | {{ $json.email.includes('@gmail') }} | true 或 false |
| 分割字串 | {{ $json.tags.split(',') }} | 陣列 |
| 字串長度 | {{ $json.name.length }} | 3 |
條件判斷(三元運算子)
這個超常用。語法是 條件 ? 成立時的值 : 不成立時的值。
{{ $json.status === 'paid' ? '已付款' : '未付款' }}
更多範例:
| 需求 | Expression |
|---|---|
| 有值就用,沒值給預設 | {{ $json.name ?? '未填寫' }} |
| 數字大小判斷 | {{ $json.score >= 60 ? '及格' : '不及格' }} |
| 多重條件 | {{ $json.level === 'vip' ? 'VIP 客戶' : ($json.level === 'normal' ? '一般客戶' : '訪客') }} |
| 空值檢查 | {{ $json.email ? $json.email : '[email protected]' }} |
小技巧:
??叫做「Nullish Coalescing」,只在值是null或undefined的時候才用右邊的值。比||更精準,因為||連空字串和0都會觸發。
進階語法
用 IIFE 寫多行邏輯
如果你的邏輯比較複雜,一行寫不下,可以用 IIFE(立即執行函式):
{{
(() => {
const items = $json.orders;
const total = items.reduce((sum, item) => sum + item.price, 0);
return `共 ${items.length} 筆,總金額 ${total} 元`;
})()
}}
存取環境變數
{{ $env.MY_API_KEY }}
取得 Workflow 資訊
| 語法 | 用途 |
|---|---|
{{ $workflow.id }} | Workflow ID |
{{ $workflow.name }} | Workflow 名稱 |
{{ $execution.id }} | 這次執行的 ID |
{{ $itemIndex }} | 目前處理到第幾個 item |
常見錯誤與解法
錯誤 1:Cannot read property 'xxx' of undefined
原因:你試著抓的欄位不存在。可能是前一個節點沒有回傳這個欄位,或是你拼錯字了。
解法:
- 先用「Test step」跑一下前面的節點,看回傳的 JSON 長什麼樣
- 用
?.(Optional Chaining)防爆:{{ $json.user?.email ?? '沒有 email' }}
錯誤 2:Expression 沒有被解析(直接顯示 {{ }})
原因:你可能把 Expression 寫在不支援的欄位裡,或是用了錯誤的引號。
解法:確認欄位旁邊有 Expression 切換鈕(點一下變成 fx 模式)。
錯誤 3:日期格式跑掉
原因:直接用 JavaScript 的 new Date() 會出現時區問題。
解法:一律用 n8n 內建的 Luxon,也就是 $now 和 DateTime 系列函式,它會自動處理時區。
錯誤 4:節點名稱找不到
原因:$('Node Name') 裡面的名字跟 workflow 裡的不一致。
解法:去 workflow 裡面確認節點名稱,複製貼上最保險。注意:如果你改了節點名稱,所有引用它的 Expression 都要跟著改。
可下載的速查 PDF
我們把這篇整理的所有語法做成了一頁 PDF,印出來貼在螢幕旁邊,寫 workflow 的時候直接查。
免費下載 n8n Expression 速查表 >> n8nstart.cc/templates
延伸閱讀
這篇是 Expression 的語法速查,如果你想更深入了解 n8n 的其他進階技巧:
- n8n Webhook 完全攻略 — 學會接收外部資料
- n8n 資料轉換技巧 — JSON 處理與節點間傳資料
- n8n 完整入門指南 — 還沒裝好 n8n 的話從這邊開始
- n8n Expression 與進階技巧大全 — 所有進階技巧的總整理
外部參考:
FAQ
n8n Expression 跟 JavaScript 有什麼不同?
Expression 用的是 JavaScript 語法,但它跑在 n8n 的沙箱環境裡,所以有些 JavaScript 功能用不了(像是 fetch 或 require)。如果需要完整的 JavaScript,用 Code 節點。
Expression 可以呼叫 API 嗎?
不行。Expression 只能做資料處理和運算,不能發 HTTP 請求。要呼叫 API 請用 HTTP Request 節點。
Expression 裡面可以用 if/else 嗎?
可以,但要用三元運算子 ? :,不能用 if () {} 這種寫法。如果邏輯太複雜,建議改用 Code 節點或 IF 節點。