n8n 表達式語法入門:{{ }} 怎麼寫才不會出錯
n8n 的 {{ }} 表達式是新手最常卡的小坑。這篇用最白話的方式教你看懂雙大括號、$json 變數和跨節點抓資料的寫法,附上四組會出錯的反例與正確寫法對照,免背語法,看完就能在任何節點欄位裡準確引用上一站傳來的資料。
n8n 表達式是寫在 {{ }} 雙大括號裡的小段 JavaScript,用來在節點欄位裡動態抓取上一站的資料。學會 $json、跨節點引用與幾個內建變數,就能讓欄位的值隨資料自動變化,而不是寫死。
設定 n8n 節點時,你遲早會碰到一個欄位想填「上一個節點傳來的姓名」,而不是固定文字。這時就要用表達式。它不難,但語法有幾個固定規則,踩錯就跳紅字。把這幾條記熟,表達式從此不再是門檻。
本文是《第一個 n8n 工作流:從零到自動化的完整入門指南》系列的延伸文章,補上新手最常卡的表達式語法。
先分清楚:固定值 vs 表達式
n8n 每個欄位右上角有一個切換鈕,分成兩種模式:
- Fixed(固定值):你打什麼就是什麼,例如填
王小明,這格永遠是王小明。 - Expression(表達式):值由
{{ }}裡的運算決定,會隨每筆資料變動。
切到 Expression 模式,欄位會變色,這時打的內容才會被當成表達式解析。新手最常見的錯,是在 Fixed 模式裡打 {{ $json.name }},結果整串文字被原封不動寫出去。先確認模式對了,再寫內容。
核心變數:$json 抓上一站的資料
最常用、九成場景都靠它的就是 $json。它代表「上一個節點傳給這個節點的當前那筆資料」。
假設上一個節點吐出這樣一筆資料:
{
"name": "王小明",
"email": "ming@example.com",
"order": { "id": 1024, "amount": 580 }
}
對應的表達式寫法:
- 抓姓名:
{{ $json.name }}→ 王小明 - 抓 email:
{{ $json.email }}→ ming@example.com - 抓巢狀的訂單編號:
{{ $json.order.id }}→ 1024 - 抓金額:
{{ $json.order.amount }}→ 580
規則就一條:用點 . 一層一層往下鑽。資料長什麼樣,左欄 INPUT 看得到,照著欄位名稱抄即可。n8n 官方對表達式的完整定義在 n8n 表達式官方文件,想看進階用法可以參考。
跨節點抓資料:$(‘節點名稱’)

有時你要的資料不在上一站,而在更前面的某個節點。這時用 $('節點名稱'):
{{ $('Webhook').item.json.name }}
意思是「去名叫 Webhook 的那個節點,抓它輸出的當前那筆資料的 name」。節點名稱要跟畫布上顯示的完全一致,包含空格和大小寫。把節點重新命名後表達式失效,多半就是名稱對不上。
內建變數速記
n8n 還有幾個好用的內建變數,新手先記這幾個:
{{ $now }}:現在的時間,常拿來蓋時間戳。{{ $today }}:今天的日期。{{ $json.email.toLowerCase() }}:表達式裡可以直接接 JavaScript 方法,這裡把 email 轉小寫。
最後一個透露了一件事:{{ }} 裡其實能寫 JavaScript。字串、數字的處理方法(像 .trim()、.toUpperCase()、.length)都能用,語法和一般 JavaScript 一致,可對照 MDN 的 JavaScript 字串說明。
會出錯的反例 vs 正確寫法

把這四組對照記起來,能避開新手九成的錯:
- 忘了切 Expression 模式:在 Fixed 模式打
{{ $json.name }}→ 整串被當文字。先切模式。 - 大括號數量錯:寫成
{ $json.name }(單括號)→ 不會解析。一定是雙大括號{{ }}。 - 欄位名打錯:
{{ $json.Name }}但資料是小寫name→ 抓到空值。大小寫要一致。 - 巢狀漏層:
{{ $json.id }}但 id 包在 order 裡 → 空值。要寫{{ $json.order.id }}。
跳紅字或抓到空值別慌,回左欄 INPUT 對照真實資料結構,九成問題一眼就看出來。看懂節點輸入輸出的方法,在n8n 介面導覽的 NDV 章節有圖解。
接下來
表達式是把各個節點「黏」起來的膠水。串 Google Sheets 寫入欄位、設定 IF 條件、組 API 請求參數,全都會用到它。想要一張可以隨時翻的對照表,收藏n8n 表達式速查表;想實際派上用場,去n8n 連接 Google Sheets 教學把資料寫進試算表試一次,比讀十遍都有效。
常見問題
n8n 的 {{ }} 表達式一定要懂 JavaScript 嗎?
不用。九成場景只要會 {{ $json.欄位名 }} 這種抓資料的寫法就夠。{{ }} 裡確實能寫 JavaScript,但那是進階需求,新手先把點記法(一層層用 . 往下鑽)練熟即可。
為什麼我的表達式被原封不動印出來?
多半是欄位還停在 Fixed(固定值)模式。要先點欄位右上的切換鈕切到 Expression 模式,欄位變色後 {{ }} 才會被當表達式解析,否則會被當成純文字。
$json 和 $(‘節點名稱’) 差在哪?
$json 抓的是「上一個節點」傳來的當前資料,最常用。$('節點名稱') 用來抓更前面某個指定節點的輸出,名稱要跟畫布上完全一致。當資料不在上一站時才需要它。
表達式抓到空值怎麼辦?
回到左欄 INPUT 看資料的真實結構,逐字比對欄位名稱的大小寫和巢狀層級。最常見原因是大小寫不符,或漏了中間一層(例如該寫 $json.order.id 卻寫成 $json.id)。
語法通了,剩下的就是多寫幾次形成肌肉記憶。回到第一個 n8n 工作流入門指南,把表達式用在真實流程裡,你會發現它其實是 n8n 裡最好用的工具。