$json เป็นตัวแปรพื้นฐานที่สำคัญที่สุดใน n8n ใช้เข้าถึงข้อมูล JSON ของ item ปัจจุบันที่กำลังประมวลผล ทำงานคล้าย this หรือ current row ใน Excel สามารถเข้าถึงข้อมูลได้ทั้งแบบ dot notation ($json.field) และ bracket notation ($json[‘field’]) ใช้บ่อยที่สุดในทุก workflow เพราะเป็นจุดเริ่มต้นของการเข้าถึงข้อมูล
=$json
=$json
เข้าถึงข้อมูลจาก API response ที่ได้รับจาก HTTP Request node
ดึงค่าจากฐานข้อมูลที่ query มาจาก database node
อ่านข้อมูลจาก webhook ที่ส่งเข้ามาในรูปแบบ JSON
ประมวลผลข้อมูลที่ได้จาก node ก่อนหน้าในทุก workflow
{{ $json.name }}={{ $json.name }}
John
{{ $json['body']['city'] }}={{ $json['body']['city'] }}
Bangkok
{{ $json.email.toLowerCase().trim() }}={{ $json.email.toLowerCase().trim() }}
user@example.com
{{ $json.status ? $json.status : 'pending' }}={{ $json.status ? $json.status : 'pending' }}
active
$json เป็น shortcut ที่เข้าถึงเฉพาะส่วน JSON data ของ item ส่วน $input.item คือ item object ทั้งหมด ที่รวมทั้ง json, binary, และ pairing info ใช้ $json เมื่อต้องการเข้าถึงข้อมูลอย่างเดียว (ใช้บ่อยกว่า 95%)
n8n ใช้ {{ }} เป็นเครื่องหมายบอกว่านี่คือ expression ที่ต้อง evaluate ไม่ใช่ plain text ถ้าไม่ครอบจะถือเป็น string ธรรมดา เหมือนกับ template engine อื่นๆ เช่น Handlebars
ใช้ dot notation ($json.name) เมื่อชื่อฟิลด์เป็น valid JavaScript identifier (ไม่มีช่องว่าง เครื่องหมายพิเศษ) ใช้ bracket notation ($json[‘First Name’]) เมื่อชื่อฟิลด์มีช่องว่างหรืออักขระพิเศษ หรือเมื่อชื่อฟิลด์เป็นตัวแปร
จะได้ undefined กลับมา ไม่ error ทันที แต่ถ้าพยายามเข้าถึง property ต่อของ undefined จะ error ดังนั้นควรใช้ optional chaining ($json?.field?.nested) หรือ ternary operator เพื่อป้องกัน
เทคนิคสำคัญ: ใช้ $json เป็นจุดเริ่มต้นเสมอเมื่อต้องการเข้าถึงข้อมูล ถ้าต้องการเข้าถึงข้อมูลจาก node อื่น ใช้ $node[\”NodeName\”].json แทน สามารถ chain method ของ JavaScript ได้ทันทีเช่น .trim(), .toLowerCase(), .split() เพราะ n8n รองรับ JavaScript expression ครบ สำหรับข้อมูล nested ลึกหลายชั้น แนะนำใช้ bracket notation เพื่อความชัดเจน และควรเช็ค null/undefined ก่อนเข้าถึงข้อมูลลึกเพื่อป้องกัน error ใน production