Jak zarządzać danymi i zmiennymi w n8n — wyrażenia i transformacje
Zrozum, jak dane przepływają między węzłami n8n. Opanuj wyrażenia, węzeł Code i filtrowanie — to fundament każdego skutecznego workflow.
Spis treści
- Jak dane przepływają między węzłami w n8n
- Jak używać wyrażeń n8n do transformacji danych krok po kroku
- Jak używać węzłów Set i Code do przetwarzania danych
- Jak filtrować i rozgałęziać przepływ za pomocą węzłów IF i Switch
- Często zadawane pytania
Jak dane przepływają między węzłami w n8n
Żeby efektywnie pracować z n8n, musisz rozumieć jeden fundamentalny koncept: każdy węzeł przetwarza tablicę elementów (items). Każdy element to obiekt JSON z polem json (dane) i opcjonalnym polem binary (pliki). Gdy webhook odbiera zamówienie, to jeden element. Gdy Google Sheets zwraca listę 50 wierszy, to 50 elementów — każdy z własnymi danymi.
Gdy połączysz dwa węzły, n8n przekazuje wszystkie elementy z wyjścia pierwszego węzła do wejścia drugiego. Węzeł przetwarzający domyślnie operuje na każdym elemencie osobno — jeśli masz 50 elementów i wyślesz email dla każdego, węzeł Email wykona się 50 razy. To tzw. przetwarzanie jeden-do-jednego.
W panelu Output każdego węzła zobaczysz zakładki z numerami elementów (Item 1, Item 2...) i strukturę JSON każdego z nich. Kliknij ikonę oka na węźle po jego wykonaniu — zobaczysz dokładnie, co weszło i co wyszło. To najważniejsze narzędzie do debugowania workflow i zrozumienia, skąd wziąć dane do następnego kroku.
Dane z jednego węzła dostępne są w kolejnym przez zmienną $json (bieżący element) lub przez odwołanie do konkretnego węzła po nazwie: $('Nazwa Węzła').item.json. Każde pole zagnieżdżone dostępne jest przez kropkę: $json.customer.address.city. Pola tablicowe przez indeks: $json.products[0].name (pierwszy produkt). Ta notacja działa w wyrażeniach we wszystkich węzłach n8n.
Jak używać wyrażeń n8n do transformacji danych krok po kroku
W każdym polu tekstowym węzłów n8n zobaczysz małą ikonę ze znaczkiem ${}. Kliknij ją — pole przełączy się w tryb wyrażenia i otworzy edytor z podglądem. Po lewej wpisujesz wyrażenie, po prawej widzisz wynik dla bieżącego elementu danych. To pozwala budować wyrażenia iteracyjnie, widząc na bieżąco, czy zwracają właściwe wartości.
Podstawowe wyrażenie: {{ $json.nazwaPola }}. Dla zagnieżdżonych danych: {{ $json.user.email }}. Dla tablic: {{ $json.items[0].price }}. Żeby odwołać się do danych z konkretnego węzła (nie bezpośrednio poprzedniego): {{ $('Webhook').item.json.orderId }}. W edytorze wyrażeń po lewej stronie masz też panel z listą dostępnych zmiennych — kliknij na wybraną, żeby wstawić ją do wyrażenia.
Wyrażenia n8n to pełny JavaScript w podwójnych nawiasach klamrowych. Łącz tekst: {{ $json.firstName + ' ' + $json.lastName }}. Zaokrąglaj liczby: {{ Math.round($json.price * 1.23) }} (cena z VAT 23%). Formatuj daty: {{ new Date($json.createdAt).toLocaleDateString('pl-PL') }}. Konwertuj typ: {{ parseInt($json.quantity) * parseFloat($json.unitPrice) }}. Używaj metod string: {{ $json.email.toLowerCase() }}, {{ $json.name.trim() }}.
N8n dostarcza kilka pomocniczych obiektów. $now zwraca aktualną datę/czas jako obiekt Luxon (np. {{ $now.toISO() }}, {{ $now.minus({days: 7}).toISO() }} — tydzień temu). $vars pozwala odwoływać się do zmiennych globalnych ustawionych w Settings → Variables — idealne dla tokenów API i konfiguracji wielokrotnie używanych w wielu workflow. {{ $vars.API_KEY }} wstawi zmienną bez ujawniania jej w kodzie workflow.
Jak używać węzłów Set i Code do przetwarzania danych
Węzeł Set to Twoje podstawowe narzędzie do manipulowania danymi bez pisania kodu. Pozwala tworzyć nowe pola, nadpisywać istniejące i usuwać niepotrzebne. Dodaj węzeł Set, kliknij Add Field i podaj nazwę nowego pola oraz wartość (statyczną lub wyrażenie). Włącz opcję Keep Only Set Fields, jeśli chcesz wyczyścić wszystkie inne pola i zostawić tylko te, które ustawiasz — to upraszcza dane przed wysłaniem do zewnętrznego API.
Przykład: po odebraniu zamówienia przez webhook chcesz przygotować dane do wysłania e-mailem. Węzeł Set tworzy pola: customerName ({{ $json.billing.first_name + ' ' + $json.billing.last_name }}), orderTotal ({{ $json.total + ' PLN' }}), orderDate ({{ new Date($json.date_created).toLocaleDateString('pl-PL') }}). Następny węzeł Email może użyć tych pól bezpośrednio bez znajomości oryginalnej struktury zamówienia WooCommerce.
Węzeł Code (dawniej Function) to pełny JavaScript. Używaj go, gdy potrzebujesz logiki niemożliwej do wyrażenia w węźle Set: pętle po tablicach, agregacja (sumowanie wartości zamówień), tworzenie nowych elementów na podstawie istniejących, wywołania do n8n helper functions. Dostęp do danych: const items = $input.all() zwraca tablicę wszystkich elementów. $input.first().json to dane pierwszego elementu. Wynik zawsze zwracaj jako tablicę: return [{json: {suma: 1234, liczba: 10}}].
Przykład węzła Code: liczysz przychód z listy zamówień. Wejście: 20 elementów (zamówień) każdy z polem total. Kod JavaScript: const suma = $input.all().reduce((acc, item) => acc + parseFloat(item.json.total), 0); return [{json: {totalRevenue: suma.toFixed(2), orderCount: $input.all().length}}]; Wynik: jeden element z łącznym przychodem i liczbą zamówień.
Jak filtrować i rozgałęziać przepływ za pomocą węzłów IF i Switch
Węzeł IF to rozgałęzienie warunkowe — kieruje elementy do jednej z dwóch ścieżek (True lub False) zależnie od spełnienia warunku. Dodaj IF po węźle dostarczającym dane, skonfiguruj warunek (wartość1 operator wartość2) i połącz wyjścia True i False z odpowiednimi kolejnymi węzłami.
Przykłady zastosowania IF: przefiltruj zamówienia powyżej 500 PLN (true: wyślij alert VIP, false: normalne przetwarzanie). Sprawdź, czy email jest wypełniony (true: wyślij potwierdzenie, false: zapisz do listy do ręcznego przejrzenia). Zweryfikuj kod rabatowy (true: zastosuj zniżkę, false: zwróć błąd). Możesz łączyć wiele warunków operatorem AND lub OR — wszystkie muszą być spełnione (AND) lub wystarczy jeden (OR).
Węzeł Switch to wielokierunkowe rozgałęzienie — odpowiednik switch/case z programowania. Skonfiguruj jedno pole do sprawdzenia i listę możliwych wartości. Każda wartość tworzy osobne wyjście. Przykład: pole status zamówienia może mieć wartości "nowe" (wyjście 0: wyślij potwierdzenie), "opłacone" (wyjście 1: przygotuj do wysyłki), "wysłane" (wyjście 2: wyślij numer śledzenia), "anulowane" (wyjście 3: zwrot środków). Możesz też dodać wyjście Fallback dla nieznanych wartości.
Ważna zasada: węzły IF i Switch nie kopiują danych — kierują istniejące elementy na odpowiednie ścieżki. Element, który trafi na ścieżkę True w IF, nie pojawi się na ścieżce False. Jeśli chcesz, żeby ten sam element był przetwarzany przez obie ścieżki, użyj węzła Split In Batches lub skopiuj dane przed IF przez węzeł Set.
Często zadawane pytania
Jak odwołać się do danych z poprzedniego węzła w n8n?
Użyj wyrażenia {{ $json.nazwaPolaLubSciezka }}. $json odnosi się do danych bieżącego elementu. Żeby odwołać się do konkretnego węzła po nazwie, użyj {{ $('Nazwa Węzła').item.json.pole }}. Kliknij ikonę wyrażenia (${}) przy dowolnym polu w n8n, żeby otworzyć edytor z podglądem dostępnych danych i panelem zmiennych.
Czy mogę pisać JavaScript w n8n?
Tak. Węzeł Code przyjmuje kod JavaScript, który ma dostęp do wszystkich danych przychodzących do węzła przez zmienną $input.all() lub $input.first(). Możesz używać pełnego JavaScript ES2020 włącznie z async/await, ale bez importowania zewnętrznych modułów npm (chyba że są wbudowane w środowisko n8n). Wynik zwróć jako return [{json: {pole: wartość}}].
Jak obsłużyć brakujące dane (null/undefined) w wyrażeniach n8n?
Użyj operatora Optional Chaining: {{ $json.user?.address?.city }}. Jeśli któreś pole nie istnieje, wyrażenie zwróci undefined zamiast rzucić błąd. Możesz też podać wartość domyślną: {{ $json.discount ?? 0 }} (operator Nullish Coalescing). Alternatywnie użyj węzła Code i sprawdź istnienie pola przez if ($json.pole !== undefined) przed jego użyciem.
Chcesz uruchomić n8n bez konfiguracji serwera?
smartxhosting.pl oferuje n8n w gotowym kontenerze Docker za 10 zł/miesiąc. Darmowy SSL, 10 GB przestrzeni i dostęp przez przeglądarkę — gotowe w kilka minut.
Zamów hosting n8n