JSON Lines (JSONL) ⇔ JSON-Array Konverter

Konvertiert zwischen dem JSON-Lines-Format (ein JSON-Objekt pro Zeile) und einem regulären JSON-Array. Praktisch zum Prüfen von Machine-Learning-Datensätzen und Log-Ausgaben.

Tipps zur Nutzung

  • JSON Lines (JSONL) ist ein Format, bei dem pro Zeile ein eigenständiges JSON-Objekt steht. Es wird u. a. standardmäßig in Fine-Tuning-Datensätzen von OpenAI sowie in der Log-Ausgabe von Elasticsearch/Logstash verwendet.
  • Im Modus „JSONL → JSON-Array" muss jede Zeile ein einzeln interpretierbares JSON-Objekt sein. Leere Zeilen werden automatisch übersprungen.
  • Im Modus „JSON-Array → JSONL" muss die gesamte Eingabe ein einziges JSON-Array (`[ ... ]`) sein. Jedes Element des Arrays wird als eine Zeile JSONL ausgegeben.
  • Wird eine große Log-Datei von JSONL in ein JSON-Array umgewandelt, lässt sie sich anschließend leichter mit dem Befehl `jq` oder dem Standard-JSON-Array-Parser der jeweiligen Programmiersprache weiterverarbeiten.

Häufig gestellte Fragen

Ein JSON-Array fasst alles in einem einzigen Array wie `[ {...}, {...} ]` zusammen, sodass einzelne Elemente erst nach dem Parsen des gesamten Arrays zugänglich sind. JSON Lines hingegen listet pro Zeile ein eigenständiges JSON-Objekt auf, sodass die Verarbeitung zeilenweise im Stream erfolgen kann – ideal für die sequenzielle Verarbeitung riesiger Log-Dateien oder Machine-Learning-Datensätze.

Es ist das Standardformat für Fine-Tuning-Datensätze bei OpenAI und anderen Machine-Learning-Plattformen, das Ausgabeformat von Log-Sammeltools wie Elasticsearch und Logstash sowie für das Streaming großer Datenmengen – überall dort, wo Datensätze einzeln und unabhängig voneinander gelesen und geschrieben werden müssen.

Im Modus „JSONL → JSON-Array" muss jede Zeile für sich gültiges JSON sein; enthält auch nur eine Zeile einen Syntaxfehler, wird eine Fehlermeldung mit der entsprechenden Zeilennummer angezeigt. Im Modus „JSON-Array → JSONL" muss die gesamte Eingabe ein Array sein (beginnend mit `[` und endend mit `]`).

Das in ein JSON-Array konvertierte Ergebnis lässt sich direkt mit dem Befehl `jq` oder dem Standard-JSON-Parser der jeweiligen Programmiersprache verarbeiten. Umgekehrt eignet sich das in JSONL konvertierte Ergebnis gut für `jq -c`, `grep`, `awk` und andere zeilenorientierte Tools und lässt sich so leicht in eine Log-Analyse-Pipeline einbinden.
ツールくん

Übrigens – Warum entstand das Format „ein Datensatz pro Zeile"?

Das JSON-Lines-Format (auch JSONL genannt) entstand, weil ein reguläres JSON-Array eine grundlegende Einschränkung hat: Es lässt sich kein einziger Datensatz abrufen, bevor nicht das gesamte Array in den Speicher geladen und vollständig geparst wurde. Wollte man Log-Daten oder Machine-Learning-Trainingsdatensätze mit mehreren Millionen Zeilen als ein einziges JSON-Array behandeln, musste die gesamte Datei in den Speicher geladen werden – bei sehr großen Dateien führte das zu Speicherengpässen und stark verlängerten Parse-Zeiten.

JSON Lines löst dieses Problem mit einer einfachen Regel: eine Zeile entspricht einem vollständigen JSON-Objekt. Da die Datei Zeile für Zeile gelesen und dabei sofort geparst werden kann, muss sie nicht komplett in den Speicher geladen werden – das macht das Format sehr gut geeignet für Streaming- und Parallelverarbeitung. Dieses Designprinzip passt außerdem gut zur traditionellen Unix-Kultur der zeilenweisen Textverarbeitung („ein Datensatz pro Zeile"; Befehle wie `grep`, `awk` und `sed` arbeiten zeilenweise) und lässt sich dadurch direkt in bestehende Kommandozeilen-Toolchains einbinden – ein erheblicher praktischer Vorteil.

Heute ist es als Verteilungsformat für Datensätze im Bereich KI und Machine Learning weit verbreitet, und es ist mittlerweile üblich, Trainingsdaten großer Sprachmodelle sowie Prompt-Antwort-Paare für Fine-Tuning im JSON-Lines-Format zu verteilen.