在本章節中,你將了解 n8n 的資料結構,以及如何使用 Code node 來轉換資料並模擬節點輸出。
從基本觀念來看,n8n 的每個節點就像一個 ETL(Extract、Transform、Load)工具。節點可以從多個不同來源擷取(extract)資料,並以特定方式修改(transform)該資料,最後將資料傳遞(load)到所需的地方。
在工作流程中,節點之間傳遞的資料,必須是每個節點都能辨識與解析的格式(結構)。在 n8n 中,這個必要的結構是一個由物件(objects)所組成的陣列(array)。
<aside> 🚀
「陣列」是一種清單(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
n8n 中的節點會針對輸入資料的每一個 item 執行動作。
現在你已熟悉 n8n 的資料結構,可以利用它來建立自己的資料集,或是模擬節點的輸出。要做到這點,你可以在 Code node 中撰寫 JavaScript 程式碼,並以以下結構定義你的物件陣列:
return [
{
json: {
apple: 'beets',
}
}
];
例如,以忍者龜(Ninja Turtles)為例的物件陣列,在 Code node 中會像下面這樣:
<aside> ⚠️
請注意,以上的物件陣列多了一層 json
鍵。n8n 預期你在陣列中的每個物件,都需要再包一層物件,並以 json
作為鍵名。
Illustration of data structure in n8n
在 n8n 中,使用正確的資料結構是個好習慣。不過,如果你忘了在 item 中加入 json
,n8n(0.166.0 版以上)會自動幫你加上。
</aside>
你也可以使用巢狀的方式定義更多屬性,例如,如果你想要定義主色與次色,就可以再用大括號 {}
來進一步包裹這些鍵-值配對。
n8n data structure video
這段演講進一步詳述了 n8n 的資料結構。