Materi 15: Memahami Struktur Data n8n

Di bab ini, Kita akan mempelajari "bahasa" yang digunakan n8n untuk berbicara antar node. Kita akan membedah struktur data n8n dan belajar menggunakan Code Node untuk memanipulasi data tersebut.

Konsep Dasar: ETL

Secara mendasar, node n8n berfungsi sebagai alat ETL:

  • Extract (Ekstrak): Mengambil data dari sumber.
  • Transform (Ubah): Memodifikasi data tersebut.
  • Load (Muat): Mengirimkannya ke tempat yang dibutuhkan.

Agar data bisa bergerak mulus dari satu node ke node lain, data tersebut harus dalam format yang dimengerti oleh n8n. Format wajib itu adalah: Array of Objects (Daftar Objek).

Apa itu Array of Objects?

Array (Daftar): Kumpulan nilai yang berurutan. Contoh: ["Merah", "Kuning", "Hijau"].

Object (Benda): Kumpulan pasangan kunci-nilai. Contoh: { "nama": "Naufal", "role": "Developer" }.

Di n8n, data yang dikirim antar node selalu berupa Array yang berisi Objek. Dan setiap objek tersebut harus dibungkus dalam kunci (key) bernama json.

Contoh struktur data n8n yang valid:

[
  {
    "json": {
      "name": "Michelangelo",
      "color": "orange"
    }
  },
  {
    "json": {
      "name": "Donatello",
      "color": "purple"
    }
  }
]
Ilustrasi struktur data n8n: Array berisi objek dengan properti json.

Setiap item data dibungkus dalam properti 'json'.

Latihan 1: Membuat Data Set dengan Code Node

Mari kita praktikkan! Kita bisa menggunakan Code Node untuk membuat data buatan (dummy) untuk simulasi.

Tambahkan Code Node ke kanvas Kita dan coba buat struktur data kontak (nama dan email) menggunakan JavaScript.

👉 Lihat Kunci Jawaban & Cara Mengerjakan

Di dalam Code Node, masukkan kode JavaScript berikut:

var myContacts = [
  {
    json: {
      name: 'Alice',
      email: {
        personal: 'alice@home.com',
        work: 'alice@wonderland.org'
      },
    }
  },
  {
    json: {
      name: 'Bob',
      email: {
        personal: 'bob@mail.com',
        work: 'contact@thebuilder.com'
      },
    }
  },
];

return myContacts;

Klik Execute Node. Hasilnya akan terlihat seperti ini:

Output Code Node menampilkan array berisi dua objek kontak.

Kita berhasil membuat struktur data n8n secara manual.

Latihan 2: Mereferensikan Data Node

Sama seperti kita menggunakan Expression di Level 1, kita juga bisa mengakses data menggunakan JavaScript di Code Node.

Sambungkan Code Node kedua setelah Code Node pertama tadi. Cobalah tulis kode untuk mengambil email kerja (work email) dari item pertama dan menyimpannya di kolom baru workEmail.

👉 Lihat Kunci Jawaban & Cara Mengerjakan

Masukkan kode berikut di Code Node kedua:

let items = $input.all();

// Menambahkan properti baru 'workEmail' ke item pertama
// Menggunakan dot notation untuk mengakses nested object
items[0].json.workEmail = items[0].json.email['work'];

return items;
Output Code Node kedua menunjukkan properti workEmail baru.

Memanipulasi data menggunakan JavaScript dot notation.

Latihan 3: Transformasi Data (Kasus Nyata: PokéAPI)

Seringkali, API mengembalikan data dalam format yang "salah" untuk n8n (misalnya: satu objek besar berisi array, bukan array of objects). Kita perlu mentransformasi data tersebut agar setiap item bisa diproses secara individual.

Mari kita coba dengan PokéAPI.

Tantangan:

  1. Gunakan node HTTP Request untuk mengambil data dari https://pokeapi.co/api/v2/pokemon.
  2. Perhatikan outputnya (hanya 1 item dengan array 'results').
  3. Gunakan node Split Out ATAU Code Node untuk memecahnya menjadi 20 item terpisah.
👉 Lihat Kunci Jawaban & Cara Mengerjakan

Langkah 1: Mengambil Data

Konfigurasi HTTP Request:

  • Metode: GET
  • URL: https://pokeapi.co/api/v2/pokemon
Output mentah dari PokéAPI.

Masalah: n8n hanya melihat 1 item berisi array.

Solusi A: Node "Split Out" (No-Code)

Tambahkan node Split Out:

  • Field to split out: results (seret dari panel input).
Output dari node Split Out.

Solusi: Data terpecah menjadi 20 item individual.

Solusi B: Code Node (Low-Code)

Gunakan JavaScript .map():

// Mengambil array 'results' dari item pertama
const results = $input.first().json.results;

// Memetakan ulang (map) menjadi format n8n yang benar
return results.map(pokemon => {
  return {
    json: pokemon
  }
});

Ringkasan

Kita 🤵🏻:

Sekarang saya mengerti kenapa struktur data itu penting. Jika formatnya salah (seperti 1 item berisi array), node selanjutnya tidak akan memprosesnya dengan benar (looping).

Di materi selanjutnya, kita akan belajar cara menangani tipe data yang lebih spesifik seperti HTML, XML, dan data biner (file).