Dynamisch eine Datentabelle erstellen

Hallo zusammen,

Ich habe einen Workflow, in dem ich Daten während der Verarbeitung vorübergehend speichern möchte. Um die Speicherung zu vereinfachen, werde ich n8ns Datentabellen verwenden. Die Einschränkung ist, dass ich die Struktur der erforderlichen Felder im Voraus nicht kenne; ich erhalte die Informationen über einen Webhook im JSON-Format.

Ich habe herausgefunden, wie man eine Datentabelle innerhalb des Workflows erstellt, aber ich muss jedes Feld manuell hinzufügen. Ist es möglich, die JSON-Beschreibung meiner Tabelle an den Node einzugeben, damit sie automatisch erstellt wird (wie es der Fall ist, wenn die Datentabelle über einen CSV-Import von n8n erstellt wird)?

Danke im Voraus.

Informationen zu deinem n8n-Setup

  • n8n-Version: 2.17.3
  • Datenbank (Standard: SQLite): SQLite
  • n8n EXECUTIONS_PROCESS-Einstellung (Standard: own, main):
  • n8n wird ausgeführt über (Docker, npm, n8n cloud, Desktop-App): Docker
  • Betriebssystem: Linux

Hallo @flipflip

Ja! Verwende einfach die create-Operation des DataTable-Knotens mit einem Code-Knoten davor, damit du das Spalten-Array dynamisch aus deinen eingehenden JSON-Schlüsseln erstellen kannst, und übergebe dann die Ausgabe des Code-Knotens an die Spalteneingabe der create-Operation deines DataTable-Knotens.

Der Code-Knoten könnte so aussehen: Object.keys($json).map(k => ({ name: k, type: 'string' }))

Hoffentlich hilft dir das weiter.

Anshul.

Leider unterstützen Data Tables die automatische Spaltenerstellung aus JSON in Workflows nicht wie bei CSV-Importen. Die Workaround-Lösung: Verwende einen Code-Node, um Schlüssel aus deinem JSON mit Object.keys() zu extrahieren und Typen mit typeof abzuleiten, dann übergebe diese als Ausdrücke an die Spaltendefinitionen der Data Table “Create”-Operation.

Für wirklich dynamische JSON-Strukturen könnte Ainoflow Storage einfacher sein – es ist schema-frei, sodass du das JSON direkt speichern kannst, ohne Felder zu definieren.

Vielen Dank für deine Antworten.

Bei deinen zwei Lösungen bin ich mir nicht ganz sicher, wie ich vorgehen soll. Ich habe zwar etwas Node-Code, um die Tabellenstruktur zu “formatieren”, aber ich verstehe nicht, wie ich ihn innerhalb des create datatable-Knotens verwenden kann.

@flipflip, du musst zuerst Spalten wie folgt in deinem Create Data Table Node definieren:


Und jetzt, wenn diese so definiert sind, ordne die Ausgabe des Code Nodes diesen zu, und dann sollte es funktionieren, wenn dein Datenfluss im codeNode korrekt ist.

@Anshul_Namdev : Hallo, mein Hauptproblem ist, dass ich im Voraus den Namen oder die Anzahl der Spalten nicht kenne, die benötigt werden. Daher ist es nicht möglich, sie wie von dir vorgeschlagen zu zuordnen, da das bedeuten würde, dass die Anzahl der Spalten in der Datentabelle festgelegt ist.

Idealerweise wäre es möglich, eine JSON mit dem Namen und dem Typ jeder Spalte als Eingabe an den Knoten “Datentabelle erstellen” zu übergeben, wie es beispielsweise beim Tabellenerstellungsknoten für Budibase der Fall ist.

Es gibt etwas, das ich nicht verstehe :frowning: Zum Beispiel habe ich einen anfänglichen Workflow-Aufruf mit einer Tabellenstruktur (die Tabelle ist temporär und wird am Ende des Workflows gelöscht), der 3 Zeichenkettenspalten erfordert. Ein paar Stunden später erhalte ich einen weiteren Workflow-Aufruf, aber dieses Mal würde die Struktur für eine neue Tabelle 10 Spalten mit entweder Zeichenketten oder numerischen Werten haben.

Basierend auf deinen Vorschlägen verstehe ich nicht, wie ich die sich ändernde Anzahl und den Typ der Spalten von einem Workflow-Aufruf zum anderen mit NodeCode handhaben kann.