NDJSON in TOML umwandeln

NDJSON kannst du hier kostenlos und ohne Konto in TOML umwandeln: Datei oben ablegen, und ein, zwei Sekunden später steht das Ergebnis zum Herunterladen bereit. Die Umwandlung läuft in deinem eigenen Browser, die Datei wird also nie hochgeladen — das klappt unter Windows, macOS und Linux ebenso wie auf iPhone und Android, und es funktioniert selbst dann noch, wenn du das Netz abschaltest.

  • Wo es läuft In deinem Browser. Die Datei wird nicht hochgeladen.
  • Verlustfrei Es geht nichts verloren. TOML enthält genau das, was auch NDJSON enthielt.
  • Größenbegrenzung Bis 100 MB pro Datei, kostenlos und ohne Konto.

Bis zu 100 Dateien auf einmal. Gemischte Formate sind kein Problem.

TOML hat eine lesbare Form für eine Liste von Datensätzen

Die verbreitete Annahme, TOML könne nicht abbilden, was JSON kann, stimmt bei einer Liste von Datensätzen nicht. Ein Array von Tabellen wird als derselbe Header in doppelten eckigen Klammern wiederholt geschrieben — dreimal [[items]] ergibt drei Datensätze —, wobei jeder Block seine eigenen Schlüssel darunter trägt. Genau dieses Konstrukt nutzt Cargo für Abhängigkeiten und Hugo für Menüeinträge.

Gegenüber dem JSON, aus dem es entstand, ist das ausführlicher und deutlich leichter zu bearbeiten. Einen Datensatz hinzuzufügen bedeutet vier Zeilen zu kopieren statt Klammern auszubalancieren und an ein Komma zu denken, und ein Diff einer Änderung an einem Datensatz betrifft nur diesen einen Block. Für eine Datei, die eine Person pflegt, ist das der ganze Vorteil.

Jede Zeile wird ein Block, und der Schlüssel heißt items

Ein TOML-Dokument muss auf oberster Ebene eine Tabelle sein, eine zeilenweise Datei ist aber eine namenlose Liste. Die Liste bekommt deshalb einen Platzhalternamen: Die Ausgabe ist eine Folge von [[items]]-Blöcken, einer pro Zeile der Quelle.

Dieser Name ist als Erstes zu ändern — ein Suchen-und-Ersetzen über die Block-Header, etwa zu [[dependencies]], [[authors]], [[produkte]], je nachdem, was das lesende Werkzeug erwartet. Aus einer NDJSON-Datei selbst lässt sich nicht ableiten, wofür die Datensätze stehen, deshalb ist der Platzhalter bewusst offensichtlich statt eine Vermutung zu sein, die plausibel aussehen und trotzdem falsch liegen könnte.

Abweichende Datensätze brauchen hier keinen Abgleich

Das ist der stille Vorteil von TOML gegenüber jedem tabellenförmigen Ziel für dieselbe Datei. Eine CSV-Datei, eine Parquet-Datei oder eine Reihe von INSERT-Statements muss Datensätze auf eine gemeinsame Spaltenmenge abgleichen und Lücken füllen, wo ein Datensatz nichts hatte. Ein Array von Tabellen tut das nicht: Jeder Block trägt genau die Schlüssel, die seine Zeile hatte.

Eine Datei, in der spätere Datensätze ein zusätzliches Feld gewinnen, wandelt sich also ohne NULL-Werte, ohne leere Zellen und ohne Verbreiterung. Das Ergebnis liest sich als das, was es ist — eine Liste weitgehend ähnlicher Datensätze — statt als dünn besetztes Raster. Für eine über die Zeit gewachsene Sammlung von Testdaten ist das meist die ehrlichere Darstellung.

Null-Werte verschwinden, ohne Warnung

TOML kennt kein Null-Literal, und der Schreiber erfindet keins. Ein Schlüssel, dessen JSON-Wert null war, wird schlicht nicht in den Block geschrieben, weder auf oberster Ebene eines Datensatzes noch tiefer darin.

Ob das etwas ausmacht, hängt vom lesenden Werkzeug ab. Viele behandeln einen fehlenden Schlüssel und einen leeren Wert gleich und fallen so oder so auf einen Standardwert zurück — für die ist nichts verloren. Wo die Unterscheidung Verhalten steuert, hat die Umwandlung die Daten still verändert, und der günstigste Schutz ist, die Quelle vor dem Umwandeln auf null zu durchsuchen, statt die beiden Dateien hinterher zu vergleichen — eine fehlende Zeile fällt deutlich schwerer auf als eine veränderte.

Verschachtelte Felder werden zu Sub-Tabellen mit Punkt

Ein Datensatz mit einem verschachtelten Objekt erzeugt darunter eine Sub-Tabelle: Ein Autor-Objekt in einem Datensatz wird zu einem [items.author]-Header mit seinen Schlüsseln darunter. Die Tiefe drückt sich im Header aus, nicht in der Einrückung, sodass selbst drei Ebenen auf der Seite flach bleiben.

Das ist auf beliebiger Tiefe zulässig und ab zwei oder drei Ebenen unangenehm zu lesen. Ein Header wie [items.metadata.source.system] ist gültig, aber niemand liest ihn gern, und eine Testdaten-Datei, die solche Header erzeugt, trägt meist mehr Struktur, als eine handgepflegte Datei tragen sollte. Das ist ein Hinweis auf die Daten, nicht auf die Umwandlung.

Einzelwerte werden vor den ersten Block gehoben

Ein TOML-Tabellenheader beansprucht jede danach folgende Zeile bis zum nächsten Header — ein einfacher Schlüssel unter einem Block würde also still Teil dieses Blocks werden. Der Schreiber setzt deshalb jeden Einzelwert auf oberster Ebene vor den ersten Header.

Bei diesem Paar kommt das selten vor, weil die Eingabe eine Liste ist und am Ende alles in einem Block landet. Beim späteren Bearbeiten der Datei zählt es dann: Einen version-Schlüssel unten in der Datei einzufügen, setzt ihn in den letzten Datensatz statt auf die oberste Ebene — der häufigste Fehler beim manuellen Umgang mit TOML. Solche Schlüssel gehören an den Anfang, vor den ersten doppelt geklammerten Header.

Zeitstempel bleiben Text, weil die Quelle keinen Datumstyp hatte

TOML 1.0 kennt vier Datums- und Zeittypen, darunter ein Offset-Datum-Zeit-Format als echten Wert statt als Text. JSON kennt keinen davon — jeder Zeitstempel in jeder JSON-Datei ist per Konvention eine Zeichenkette oder eine Zahl —, deshalb wird ein Wert wie „2024-01-01T00:00:00Z" als gequoteter TOML-String geschrieben.

Das ist korrekt und zugleich weniger, als das Format ausdrücken könnte. Will das lesende Werkzeug ein echtes Datum-Zeit-Objekt, genügt es, bei diesen Zeilen die Anführungszeichen zu entfernen — sonst muss an der Datei nichts geändert werden. Das lässt sich gut erledigen, während man ohnehin gerade die Block-Header umbenennt.

Wie viele Datensätze zu viele sind

Ein paar Dutzend sind angenehm. Ein paar Hundert ergeben eine Datei, die niemand lesen wird, die ein Werkzeug aber weiterhin schnell verarbeitet. Ein paar Tausend Blöcke sind eine Konfigurationsdatei nur noch dem Namen nach, und an diesem Punkt gilt keine der Eigenschaften mehr, die TOML attraktiv machten — lesbare Diffs, manuelle Bearbeitung, Kommentare neben den Werten.

Diese Faustregel lohnt sich ehrlich anzuwenden: Wird die Datei ohnehin niemand öffnen, lohnt sich die Umwandlung in ein Konfigurationsformat nicht. CSV ist kleiner und wird von jedem Werkzeug gelesen, JSON ist das, was die Daten ohnehin schon waren, und eine Datenbank ist das Richtige, wenn die Liste später abgefragt werden soll. TOML verdient seinen Platz nur, wenn eine Person das Ergebnis tatsächlich pflegt.

Was die TOML-Datei bekommt, das die NDJSON-Datei nicht haben konnte

Kommentare — der ganze Grund, warum Konfigurationsformate so aussehen, wie sie aussehen. JSON kennt keine, also auch keine zeilenweise Datei daraus, sodass die Gründe hinter den Werten einer Testdaten-Sammlung derzeit in einer Commit-Nachricht stehen oder in niemandes Kopf mehr.

Sobald die Datei TOML ist, können diese Gründe direkt neben den Einträgen stehen: warum dieser Datensatz aus einem Test ausgeschlossen ist, welche vorgelagerte Kennung ein Wert treffen muss, was kaputtgeht, wenn ein Eintrag umsortiert wird. Das ist Information, die eine generierte Datei nie hätte tragen können, und die ersten Minuten nach der Umwandlung sind der günstigste Zeitpunkt, sie aufzuschreiben.

Die Umwandlung läuft im Browser, wie der Rest dieser Gruppe

Beide Hälften laufen als JavaScript in diesem Tab: Die Datei wird zeilenweise gelesen, und das TOML wird von einer kleinen, bei Bedarf nachgeladenen Bibliothek geschrieben. Nichts wird hochgeladen, es gibt kein Konto, und die kostenlose Stufe erlaubt bis zu 100 MB — eine Grenze, der bei einer Datei, für die diese Umwandlung passt, niemand nahekommt.

Der Datenschutz-Aspekt zählt trotzdem auch auf dieser Größenordnung. Eine Testdaten-Sammlung enthält oft echte Daten mit stehen gebliebenen Namen, und eine Seed-Datei für eine Entwicklungsdatenbank ist häufig ein Ausschnitt aus dem Produktivsystem. Sie nicht zu versenden ist hier eine kleinere Entscheidung als bei einer Log-Datei — und trotzdem die richtige.

NDJSON in TOML umwandeln — so geht es

  1. Leg deine NDJSON-Datei auf dieser Seite ab, oder klick, um eine auszuwählen.
  2. Wähl TOML als Ziel. Die Umwandlung läuft in deinem Browser, die Datei wird nicht hochgeladen.
  3. Lade die fertige TOML-Datei herunter.

NDJSON und TOML im Vergleich: was sich ändert

NDJSON im Vergleich zu TOML
NDJSONTOML
Vollständiger NameNewline-Delimited JSONTom's Obvious Minimal Language
Dateiendung.ndjson, .jsonl.toml
Medientypapplication/x-ndjsonapplication/toml
Erstmals veröffentlicht20132013
SpezifikationTOML 1.0
LizenzlageOffener StandardOffener Standard
Heutiger StandAktuellAktuell
Öffnet im BrowserKein BrowserKein Browser
Stattdessen erwogenJSON, CSVYAML, JSON, INI

Was erhalten bleibt

Es geht nichts verloren. NDJSON und TOML speichern ihren Inhalt verlustfrei — die Umwandlung tauscht die Verpackung, nicht die Qualität, und du kannst sie wiederholen, ohne dass sich Schäden aufsummieren.

Das Ergebnis öffnen

Die üblichen Programme überschneiden sich nicht: NDJSON öffnest du in jq und pandas, TOML in Visual Studio Code — wer das Ergebnis bekommt, braucht also eines aus der zweiten Reihe.

Wofür die beiden Formate gedacht sind

Die beiden zielen auf verschiedene Arbeit: NDJSON auf den Austausch zwischen Programmen und das Streaming, TOML auf die Bearbeitung. Das lohnt sich vorher abzuwägen — der Grund, aus dem es das eine gibt, ist meist der Grund, aus dem das andere unpraktisch ist.

TOML stammt aus 2013, festgehalten in TOML 1.0. Visual Studio Code liest das Format.

NDJSON zu TOML: häufige Fragen

Werden meine NDJSON-Dateien irgendwo hochgeladen?

Nein. Diese Umwandlung läuft vollständig in deinem Browser, die Datei verlässt dein Gerät also nicht. Du kannst das selbst nachprüfen: Öffne den Netzwerk-Tab der Entwicklerwerkzeuge und wandle etwas um. Zu sehen sind die Seite selbst und die Statistik- und Werbeanfragen, mit denen dieser Dienst bezahlt wird — und keine einzige, die deine Datei trägt.

Ist das Umwandeln von NDJSON in TOML kostenlos?

Ja. Kein Konto, kein Wasserzeichen und kein Tageskontingent, das sich verbraucht — es läuft auf deinem eigenen Rechner, du darfst also so oft wiederkommen, wie du willst. Dateien bis 100 MB verarbeitet der Browser, 100 auf einmal.

Geht beim Umwandeln von NDJSON in TOML Qualität verloren?

Nein. TOML speichert denselben Inhalt, ohne etwas wegzuwerfen — das Ergebnis ist qualitativ mit dem Original identisch.

Ist NDJSON zu TOML verlustfrei?

Es geht nichts verloren. NDJSON und TOML speichern ihren Inhalt verlustfrei — die Umwandlung tauscht die Verpackung, nicht die Qualität, und du kannst sie wiederholen, ohne dass sich Schäden aufsummieren.

Mehr über diese Formate