在本章節中,你將了解 n8n 的資料結構,以及如何使用 Code node 來轉換資料並模擬節點輸出。

Data structure of n8n

從基本觀念來看,n8n 的每個節點就像一個 ETL(Extract、Transform、Load)工具。節點可以從多個不同來源擷取(extract)資料,並以特定方式修改(transform)該資料,最後將資料傳遞(load)到所需的地方。

在工作流程中,節點之間傳遞的資料,必須是每個節點都能辨識與解析的格式(結構)。在 n8n 中,這個必要的結構是一個由物件(objects)所組成的陣列(array)

<aside> 🚀

About array of objects

「陣列」是一種清單(list),可以是空的,也可以包含多個元素。清單中的每個元素都有其位置(索引),索引從 0 開始,可以透過索引值來存取。例如,在陣列 ["Leonardo", "Michelangelo", "Donatello", "Raphael"] 中,索引 2 的元素是 Donatello。

「物件」則是以鍵-值(key-value)配對的形式儲存資料,而不像陣列以編號的方式來存取元素。物件中鍵-值配對的順序並不重要,你可以透過鍵名來取得對應的值。例如,以下的物件包含兩個屬性(name 與 color):

{
	name: 'Michelangelo',
	color: 'blue',
}

「物件陣列」指的是一個陣列裡面包含一個或多個物件。例如,下方的陣列 turtles 就包含了四個物件:

var turtles = [
	{
		name: 'Michelangelo',
		color: 'orange',
	},
	{
		name: 'Donatello',
		color: 'purple',
	},
	{
		name: 'Raphael',
		color: 'red',
	},
	{
		name: 'Leonardo',
		color: 'blue',
	}
];

你可以使用點符號(dot notation)存取物件中的屬性,語法為 物件.屬性。例如,turtles[1].color 可以取得第二隻烏龜的顏色。

</aside>

從一個節點傳到另一個節點的資料會以 JSON 物件的陣列形式傳送。這些集合中的元素被稱為 items。

Items

Items

n8n 中的節點會針對輸入資料的每一個 item 執行動作。

image.png

Creating data sets with the Code node

現在你已熟悉 n8n 的資料結構,可以利用它來建立自己的資料集,或是模擬節點的輸出。要做到這點,你可以在 Code node 中撰寫 JavaScript 程式碼,並以以下結構定義你的物件陣列:

return [
	{
		json: {
			apple: 'beets',
		}
	}
];

例如,以忍者龜(Ninja Turtles)為例的物件陣列,在 Code node 中會像下面這樣:

image.png

<aside> ⚠️

JSON objects

請注意,以上的物件陣列多了一層 json 鍵。n8n 預期你在陣列中的每個物件,都需要再包一層物件,並以 json 作為鍵名。

Illustration of data structure in n8n

Illustration of data structure in n8n

在 n8n 中,使用正確的資料結構是個好習慣。不過,如果你忘了在 item 中加入 json,n8n(0.166.0 版以上)會自動幫你加上。

</aside>

你也可以使用巢狀的方式定義更多屬性,例如,如果你想要定義主色與次色,就可以再用大括號 {} 來進一步包裹這些鍵-值配對。

n8n data structure video

n8n data structure video

這段演講進一步詳述了 n8n 的資料結構。

Exercise