n8n expression n8n 語法 n8n 教學 n8n 變數 速查表

n8n Expression 語法速查表:常用寫法一次整理(2026)

整理 n8n Expression 常用語法,包含 $json 取值、日期處理、字串操作、條件判斷,附可下載速查表,寫 workflow 再也不用 Google。

N8NMarket 2026年3月28日 12 分鐘閱讀

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') }}truefalse
分割字串{{ $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」,只在值是 nullundefined 的時候才用右邊的值。比 || 更精準,因為 || 連空字串和 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

原因:你試著抓的欄位不存在。可能是前一個節點沒有回傳這個欄位,或是你拼錯字了。

解法

  1. 先用「Test step」跑一下前面的節點,看回傳的 JSON 長什麼樣
  2. ?.(Optional Chaining)防爆:{{ $json.user?.email ?? '沒有 email' }}

錯誤 2:Expression 沒有被解析(直接顯示 {{ }})

原因:你可能把 Expression 寫在不支援的欄位裡,或是用了錯誤的引號。

解法:確認欄位旁邊有 Expression 切換鈕(點一下變成 fx 模式)。

錯誤 3:日期格式跑掉

原因:直接用 JavaScript 的 new Date() 會出現時區問題。

解法:一律用 n8n 內建的 Luxon,也就是 $nowDateTime 系列函式,它會自動處理時區。

錯誤 4:節點名稱找不到

原因$('Node Name') 裡面的名字跟 workflow 裡的不一致。

解法:去 workflow 裡面確認節點名稱,複製貼上最保險。注意:如果你改了節點名稱,所有引用它的 Expression 都要跟著改。

可下載的速查 PDF

我們把這篇整理的所有語法做成了一頁 PDF,印出來貼在螢幕旁邊,寫 workflow 的時候直接查。

免費下載 n8n Expression 速查表 >> n8nstart.cc/templates

延伸閱讀

這篇是 Expression 的語法速查,如果你想更深入了解 n8n 的其他進階技巧:

外部參考:


FAQ

n8n Expression 跟 JavaScript 有什麼不同?

Expression 用的是 JavaScript 語法,但它跑在 n8n 的沙箱環境裡,所以有些 JavaScript 功能用不了(像是 fetchrequire)。如果需要完整的 JavaScript,用 Code 節點。

Expression 可以呼叫 API 嗎?

不行。Expression 只能做資料處理和運算,不能發 HTTP 請求。要呼叫 API 請用 HTTP Request 節點。

Expression 裡面可以用 if/else 嗎?

可以,但要用三元運算子 ? :,不能用 if () {} 這種寫法。如果邏輯太複雜,建議改用 Code 節點或 IF 節點。