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.
Was JSON Lines (JSONL) ist
JSON Lines ist ein Format, bei dem jede Zeile ein JSON-Objekt enthält. Die Datei als Ganzes ist kein JSON, weshalb es keine abschließenden Kommas zu verwalten gibt und neue Datensätze schlicht als weitere Zeile angehängt werden. Verbreitet ist es überall dort, wo Daten satzweise fließen: Anwendungsprotokolle, Trainingsdaten für maschinelles Lernen und Massenimporte in BigQuery oder Elasticsearch. Üblich sind die Endungen `.jsonl` und `.ndjson`.
Dieses Werkzeug wandelt in beide Richtungen zwischen JSON Lines und einem JSON-Array um. Von JSONL zum Array werden Leerzeilen übersprungen, und jede Zeile, die kein gültiges JSON ist, wird gemeldet. In der Gegenrichtung muss auf oberster Ebene ein Array stehen, sonst schlägt die Umwandlung fehl. Alles läuft in Ihrem Browser, sodass Protokolle und Trainingsdaten, die Sie lieber nicht verschicken, auf Ihrem Rechner bleiben.
So wandeln Sie zwischen JSONL und einem JSON-Array um
- Richtung wählen Von JSONL zum JSON-Array oder vom JSON-Array zu JSONL.
- Daten einfügen Bei JSONL ein Objekt je Zeile. Bei einem Array fügen Sie den mit `[` beginnenden Text unverändert ein.
- Bei einem Fehler die genannte Zeile prüfen Die Meldung nennt die Zeile, die sich nicht auswerten ließ. Ein abschließendes Komma oder ein nicht geschlossenes Anführungszeichen sind die üblichen Ursachen.
- Ergebnis kopieren Speichern Sie die Ausgabe als Datei oder geben Sie sie direkt an den nächsten Schritt Ihrer Verarbeitung weiter.
Tipps für die 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.
Wofür sich diese Umwandlung eignet
Protokolle an ein Auswertungswerkzeug übergeben
Zeilenweise geschriebene Anwendungsprotokolle lassen sich, zu einem JSON-Array zusammengefasst, von array-orientierten Werkzeugen und Bibliotheken unmittelbar verarbeiten.
Trainingsdaten aufbereiten
Trainingsdaten werden oft als JSONL verteilt, während Vorverarbeitungsskripte ein Array erwarten. Hier schlägt das Werkzeug die Brücke.
In BigQuery oder Elasticsearch laden
Beide nehmen zeilengetrenntes JSON als Eingabeformat an, sodass sich ein vorhandenes Array in eine importierbare Form bringen lässt.
Eine große JSON-Datei zeilenweise handhabbar machen
Ein Array muss vollständig gelesen werden, bevor die Verarbeitung beginnen kann; als JSONL lässt es sich Zeile für Zeile abarbeiten.
Begriffe rund um JSON Lines
- JSON Lines (JSONL)
- Ein Format mit einem JSON-Wert je Zeile. **Die Datei als Ganzes ist kein gültiges JSON**, weil mehrere Werte nebeneinanderstehen. Ihr Vorteil ist, dass sich jede Zeile für sich lesen lässt.
- NDJSON
- Kurz für Newline Delimited JSON und im Wesentlichen dasselbe wie JSON Lines. Von diesem Namen stammt die Endung `.ndjson`.
- Stromverarbeitung
- Daten von vorn verarbeiten, sobald sie eintreffen, ohne sie zuvor vollständig zu laden. JSONL passt zu diesem Vorgehen, weshalb beide oft gemeinsam auftreten.
- Oberste Ebene
- Der äußerste Wert eines JSON-Dokuments. Für die Umwandlung nach JSONL muss hier ein Array `[...]` stehen; ein Objekt `{...}` lässt sich nicht umwandeln.
- Leerzeilen
- In JSONL haben Leerzeilen keine Bedeutung. Dieses Werkzeug überspringt sie, sodass ein überzähliger Zeilenumbruch am Dateiende die Umwandlung nicht stört.
Häufig gestellte Fragen
Ü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.