Expressions verstehen: $json, $node und items ohne Code mappen
Die größte n8n-Lernhürde erklärt: was Items, $json und $node bedeuten und wie du Werte per Drag-and-Drop ohne Code mappst.
Wer zum ersten Mal in n8n einen Workflow baut, kommt früher oder später an einen Punkt, an dem eine feste UI-Einstellung nicht mehr reicht: Ein Wert soll aus dem vorherigen Node kommen, sich je nach Eingabedaten ändern oder aus einem ganz anderen Knoten weiter vorne im Workflow stammen. Genau hier beginnt für viele neue Nutzer die größte Lernhürde, denn plötzlich tauchen Begriffe wie $json, $node und items auf, die ohne Erklärung wie kryptischer Code wirken. Dabei steckt dahinter ein ziemlich einfaches Prinzip, sobald einmal klar ist, wie n8n Daten zwischen Knoten weiterreicht.
Dieser Beitrag erklärt an konkreten Beispielen, was ein Item in n8n wirklich ist, wie $json und $node zusammenhängen und wie du Werte per Drag-and-Drop mappst, ganz ohne selbst eine Zeile Code zu schreiben. Grundlage sind die offizielle n8n-Dokumentation zu Expressions und zur internen Datenstruktur, Stand Juli 2026.
Was ist ein Item in n8n wirklich?
n8n reicht Daten zwischen Knoten immer als Array von Objekten weiter, und jedes einzelne Element in diesem Array wird als Item bezeichnet. Laut der n8n-Dokumentation zur Datenstruktur hat jedes Item die feste Form `{ json: {...} }`, wobei die eigentlichen Nutzdaten immer unter dem Schlüssel json liegen. Ein Beispiel mit zwei Items sieht so aus:
- Item 1: `{ json: { name: "Anna", plz: "18055" } }`
- Item 2: `{ json: { name: "Jonas", plz: "23552" } }`
Wichtig für das Verständnis: Ein Node in n8n verarbeitet in der Regel jedes Item einzeln und wiederholt seine konfigurierte Aktion für jedes Element im Array. Wenn ein HTTP-Request-Node zwei Items empfängt, sendet er standardmäßig auch zwei Anfragen, eine pro Item. Wer das einmal verinnerlicht hat, versteht auch, warum sich Expressions in n8n immer auf das aktuell verarbeitete Item beziehen und nicht auf die gesamte Liste.
$json: Zugriff auf das aktuelle Item
$json ist die am häufigsten verwendete Variable in n8n-Expressions und steht für die json-Daten des Items, das der aktuelle Knoten gerade verarbeitet. $json ist dabei eine Kurzform von $input.item.json, dem Input-Item des aktuellen Knotens. Willst du zum Beispiel im nächsten Knoten den Namen aus dem Beispiel oben ausgeben, schreibst du in ein Textfeld:
`{{ $json.name }}`
n8n ersetzt diesen Ausdruck bei der Ausführung durch den tatsächlichen Wert des jeweiligen Items, bei zwei Items also einmal "Anna" und einmal "Jonas". Verschachtelte Felder erreichst du mit Punktnotation, etwa `{{ $json.adresse.plz }}`, sofern die Daten entsprechend strukturiert sind.
$node und $(): Daten aus anderen Knoten holen
Sobald ein Wert nicht aus dem direkt vorherigen Knoten kommen soll, sondern aus einem beliebigen anderen Knoten weiter vorne im Workflow, reicht $json nicht mehr aus. Genau dafür gibt es $node beziehungsweise dessen Nachfolger $(). In älteren Workflows und Tutorials findest du häufig noch die Schreibweise `$node["Node-Name"].json.feld`, diese Syntax gilt inzwischen als veraltet. Die aktuelle, in der n8n-Dokumentation zum Referenzieren vorheriger Knoten beschriebene Form lautet:
`{{ $('Node-Name').item.json.feld }}`
Willst du nicht nur das aktuell verknüpfte Item, sondern gezielt das erste, letzte oder alle Items eines bestimmten Knotens abrufen, stehen dir zusätzlich `$('Node-Name').first()`, `$('Node-Name').last()` und `$('Node-Name').all()` zur Verfügung. Findest du in einem Workflow gerade einen alten, mit $node geschriebenen Ausdruck, lohnt es sich, ihn bei Gelegenheit auf die $()-Schreibweise umzustellen, damit er auch nach künftigen n8n-Updates zuverlässig funktioniert.
Beispiel: E-Mail-Adresse aus einem früheren Formular-Knoten holen
Angenommen, ein Workflow startet mit einem Formular-Knoten namens "Kontaktformular", der unter anderem eine E-Mail-Adresse erfasst. Drei Knoten weiter, in einer HTTP-Request-Anfrage an ein CRM, brauchst du genau diese Adresse wieder, auch wenn die dazwischenliegenden Knoten selbst gar keine E-Mail-Daten mehr enthalten. Der Ausdruck dafür lautet:
`{{ $('Kontaktformular').item.json.email }}`
Damit greifst du unabhängig davon, was die Knoten dazwischen mit den Daten gemacht haben, direkt auf das ursprüngliche Item aus dem Kontaktformular zu.
Mapping ohne Code: Drag-and-Drop in n8n
Der komfortabelste Einstieg in Expressions führt gar nicht über das Tippen von Code. Im Input-Panel eines Knotens zeigt n8n die eingehenden Daten als Liste oder Tabelle an, und jedes einzelne Feld lässt sich per Maus direkt in ein Parameterfeld ziehen. n8n erzeugt daraus automatisch den passenden Ausdruck, zum Beispiel `{{ $json.fruit }}`, ohne dass du die Syntax selbst kennen musst. Laut der n8n-Dokumentation zu Expressions gegenüber Datentransformations-Knoten lohnt sich diese Methode besonders, wenn du nur einen einzelnen Wert aus vorherigen Daten übernehmen willst, denn n8n zeigt direkt in der Vorschau, welcher konkrete Wert bei der Ausführung eingesetzt wird. Für Operationen wie Sortieren, Zusammenführen oder Duplikate entfernen empfiehlt die Dokumentation dagegen die fertigen Datentransformations-Knoten, weil diese ohne jede Expression auskommen und über eine geführte Oberfläche bedient werden.
Typische Stolperfallen beim Einstieg
- Verwechslung von Item und ganzer Liste: $json liefert immer nur das aktuelle Item, niemals alle Items auf einmal. Wer alle Items durchgehen will, braucht $input.all() oder $('Node-Name').all() und meist eine Schleifenlogik oder einen Code-Knoten.
- Veraltete $node-Syntax aus alten Tutorials: Viele ältere Anleitungen im Netz zeigen noch $node["Name"].json, was in aktuellen n8n-Versionen zu Fehlern führen kann. Die Expression-Referenz der Dokumentation führt stattdessen konsequent die $()-Schreibweise.
- Fehlender json-Schlüssel bei eigenem Code: Wer im Code-Knoten selbst Daten zurückgibt, muss beachten, dass jedes zurückgegebene Objekt wieder in `{ json: {...} }` eingepackt sein muss, sonst meldet n8n einen Fehler.
- Expression zeigt keinen Wert an: Meist liegt es daran, dass der referenzierte Knoten in diesem Ausführungspfad noch gar nicht gelaufen ist oder das Feld im aktuellen Item tatsächlich leer ist. Ein Blick ins Input-Panel des betroffenen Knotens klärt das schneller als jede Fehlersuche im Code.
Wer diese vier Punkte einmal verinnerlicht hat, hat die größte Einstiegshürde in n8n genommen und behält von da an die Kontrolle über eigene Workflows, auch ohne Entwickler-Hintergrund. Wer beim Aufbau komplexerer Automatisierungen trotzdem lieber auf erfahrene Unterstützung setzt, findet bei der n8n-Automatisierung von NordFlux eine Umsetzung mit Festpreis und deutscher Datenhoheit.
Häufige Fragen
Was ist der Unterschied zwischen $json und $input.item?
$json ist eine Kurzform für $input.item.json und liefert direkt die json-Daten des aktuellen Items. $input.item liefert dagegen das komplette Item-Objekt inklusive eines möglichen binary-Schlüssels, weshalb $json in der Praxis fast immer der kürzere und gebräuchlichere Weg ist, wenn du nur auf normale Feldwerte zugreifen willst.
Warum sehe ich in alten Workflows $node statt $()?
$node["Name"].json war die ursprüngliche Syntax, um Daten aus einem bestimmten Knoten zu referenzieren, gilt inzwischen aber als veraltet. n8n empfiehlt stattdessen die Schreibweise $('Name'), die stabiler mit Umbenennungen und künftigen Versionsänderungen umgeht. Alte Workflows mit $node laufen meist weiterhin, sollten bei nächster Gelegenheit aber umgestellt werden.
Kann ich mit $json auch auf ein Feld aus einem ganz anderen Knoten zugreifen?
Nein, $json bezieht sich immer nur auf das Item des direkt eingehenden Datenstroms am aktuellen Knoten. Für Felder aus einem beliebigen anderen, weiter vorne liegenden Knoten brauchst du die Schreibweise $('Node-Name').item.json.feldname, wie in der Dokumentation zum Referenzieren vorheriger Knoten beschrieben.
Muss ich Expressions immer von Hand tippen?
Nein, meistens nicht. Du kannst Felder aus dem Input-Panel direkt per Drag-and-Drop in ein Parameterfeld ziehen, n8n erzeugt den passenden Ausdruck automatisch. Von Hand tippen lohnt sich vor allem, wenn du auf Daten aus einem weiter entfernten Knoten zugreifen oder die Werte zusätzlich mit Methoden wie .toUpperCase() oder .map() weiterverarbeiten möchtest.
Was passiert, wenn ein Item das referenzierte Feld gar nicht enthält?
Dann liefert die Expression meist undefined oder einen leeren Wert zurück, statt eines Fehlers, es sei denn, du greifst auf ein Feld eines verschachtelten Objekts zu, das selbst nicht existiert. In solchen Fällen hilft die Funktion $ifEmpty() aus der Expression-Referenz, um automatisch einen Standardwert einzusetzen, statt die Ausführung abbrechen zu lassen.
NordFlux UG (haftungsbeschränkt)
NordFlux baut Organisationen digitale Mitarbeiter: Automatisierungen und KI-Agenten, die wiederkehrende Arbeit abnehmen. Sie behalten die Kontrolle.
Konkrete Fragen zu Automatisierung oder KI?
In der kostenlosen Erstanalyse besprechen wir Ihren Fall direkt. Unverbindlich.