Früher oder später muss dein Spiel Daten lesen, die es nicht mitgeliefert hat: eine Config, die ein Designer bearbeitet, ein Mod, den ein Spieler reinwirft, eine Antwort vom Server. Diese Daten kommen fast immer als JSON oder CSV. Die gute Nachricht: UE5 kann JSON jetzt nativ in Blueprints parsen. Der Haken: fast niemand weiß, dass es die Nodes gibt, und CSV ist nur halb unterstützt. Ziehen wir die Grenze sauber.

Die nativen JSON-Nodes, die keiner aktiviert

UE5 liefert ein Plugin namens JSON Blueprint Utilities. Es ist standardmäßig aus. Edit → Plugins, "JSON Blueprint Utilities" suchen, aktivieren, neu starten. Jetzt hast du Blueprint-Nodes, um einen JSON-String in ein strukturiertes Objekt zu verwandeln und seine Felder zu lesen.

Der Kern-Flow:

CB0

Du ziehst Werte per Key mit typisierten Gettern heraus (String, Number, Bool, Array, verschachteltes Objekt). Offiziell, in der Engine, kein Marketplace-Download.

Wo der native JSON-Weg mühsam wird

Es funktioniert — aber Feld für Feld. Es gibt kein automatisches Mapping von JSON auf ein Blueprint-Struct; du liest jeden Key von Hand und baust das Struct selbst zusammen. Verschachtelte Objekte heißen Getter an Getter ketten. Für eine Drei-Felder-Config ist das ok. Für ein Vierzig-Felder-Payload oder ein verschachteltes Mod-Manifest ist es eine Wand aus Nodes. Und Error-Handling ist manuell: frag nach einem Key, der nicht da ist, und du bekommst einen Default-Wert, keine Warnung — ein Tippfehler scheitert also still.

CSV: es gibt keine nativen Runtime-Nodes

Hier der Teil, der die Leute überrascht. Unreal liebt CSV — aber nur zur Edit-Zeit, als DataTable-Import. Es gibt keinen eingebauten Blueprint-Node, der einen beliebigen CSV-String zur Laufzeit parst. Wenn dein Spiel eine CSV herunterlädt oder eine vom User liest, gibt dir die Engine out of the box nichts.

Deine realistischen Optionen:

  • Als DataTable importieren (nur Edit-Zeit) — perfekt für feste Daten, die mit dem Spiel mitkommen, nutzlos für alles zur Laufzeit.
  • Selbst bauen — die Datei als String lesen, an Zeilenumbrüchen splitten, an Kommas splitten. Ok für sauberes ASCII; bricht in dem Moment, in dem ein Feld ein Komma oder ein Anführungszeichen enthält.
  • Ein Plugin — siehe unten.

Encoding wird dich beißen

Beide Formate: achte aufs Encoding. Eine UTF-8-Datei, gespeichert mit BOM (Byte-Order-Mark), lässt den allerersten Key falsch parsen, und du starrst eine Stunde drauf. Nicht-ASCII-Zeichen (ä, é, —) brechen naive CSV-Splitter und manche Parser komplett. Speicher deine Datendateien als UTF-8 ohne BOM, und teste mit echten Namen und Umlauten, nicht test123.


Plugin tip
Die nativen JSON-Nodes sind Feld für Feld, und Runtime-CSV ist schlicht nicht da. In dem Moment, in dem du mehr als drei Keys liest, wird diese Lücke nervig. FoxData deckt genau das ab — JSON und CSV-Parsing zur Laufzeit, dazu Config- und DataTable-Helfer — als saubere Blueprint-Nodes, kein C++. Optional, aber für ein datengetriebenes Spiel entfernt es eine ganze Kategorie Boilerplate.

Wann du überhaupt dazu greifst

  • Config-/Balance-Dateien, die ein Designer ohne Rebuild bearbeiten kann.
  • Mod-Support — lass Spieler JSON reinwerfen.
  • Server-getriebener Content — JSON von einer API holen (passt zu den HTTP-Nodes).
  • Save-Daten-Austausch — auch wenn du für echte Saves das SaveGame-System nimmst (nächste Woche).

Wenn die Daten mit dem Spiel mitkommen und sich zur Laufzeit nie ändern, brauchst du nichts davon — ein DataTable oder DataAsset ist einfacher. Das ist das Thema übernächste Woche.

Typische Fehler

  • Plugin nicht aktiviert. Die JSON-Nodes existieren nicht, bis du JSON Blueprint Utilities anschaltest und den Editor neu startest.
  • Runtime-CSV-Import erwarten. DataTable-CSV-Import ist nur im Editor. Es gibt keinen nativen Runtime-CSV-Node — such nicht danach.
  • Naives Komma-Splitten. Ein einziges Feld mit Komma in Anführungszeichen zerstört einen selbstgebauten Parser. Nimm einen echten Parser für alles jenseits trivialer Daten.
  • BOM und Encoding. UTF-8 ohne BOM. Teste mit Umlauten, bevor du shippst.
  • Riesige Dateien im Game-Thread parsen. Ein 5-MB-JSON in einem Frame geparst ist ein sichtbarer Hitch. Große Payloads gehören off-thread oder in Chunks.
  • Keine Validierung. Bestätige immer, dass ein Feld existiert / ein Parse geklappt hat, bevor du den Wert nutzt — sonst shippst du einen Crash, der bei der ersten kaputten Datei auslöst.

Die 30-Sekunden-Zusammenfassung

  • JSON: JSON Blueprint Utilities aktivieren (Engine-Plugin, standardmäßig aus) → Strings zu Objekten parsen, per Key lesen.
  • Natives JSON ist Feld für Feld; es gibt kein automatisches Struct-Mapping.
  • CSV hat keinen nativen Runtime-Blueprint-Parser — nur Edit-Zeit-DataTable-Import.
  • Encoding zählt: UTF-8 ohne BOM, und teste mit Nicht-ASCII-Zeichen.
  • Validiere, bevor du liest, und halt große Parses aus dem Game-Thread.

Nächsten Sonntag, wenn die Votes halten: Save/Load richtig gemacht — warum das Standard-SaveGame schnell an seine Grenzen kommt, und wie du Slots, Versionierung und Async-Saves ohne Hitch machst.

— Marco