Wie benutzt du dieses Tool?
- TOML in das Eingabe-Feld einfügen, Datei per Drag-and-drop ablegen oder ein Beispiel laden
- Ausgabeformat wählen: JSON (Standard), JSON5 (mit Kommentaren) oder YAML
- Datetime-Sidecar an oder aus — an für lossless Round-Trip, aus für menschenlesbare ISO-Strings
- Optional: Kommentare erhalten, wenn das Ausgabeformat JSON5 ist
- Output kopieren oder als Datei herunterladen. Im zweiten Tab JSON → TOML rückkonvertieren
Was macht der TOML-zu-JSON-Konverter?
Der Konverter liest TOML 1.0 und gibt drei Zielformate aus — JSON, JSON5 oder YAML — je nachdem, wofür das Ergebnis weiterverwendet werden soll. Anders als typische Konverter, die alle TOML-Werte in einen flachen JSON-Strom drücken, behält dieser Konverter die strukturellen Informationen, die TOML vom JSON unterscheidet: vier Datetime-Typen, Kommentare und nachvollziehbare Hierarchie.
Pure-client. Jede Eingabe bleibt in deinem Browser. Keine Anmeldung, kein Server-Upload, kein Tracking — du kannst das mit den Browser-Dev-Tools im Netzwerk-Tab selbst überprüfen.
Drei Eigenschaften unterscheiden ihn von den Standard-Konvertern:
- Datetime-Sidecar. Die vier TOML-Datetime-Typen (mit/ohne Zeitzone, nur Datum, nur Uhrzeit)
bleiben über einen
{$type, value}-Wrapper erhalten — beim Rückweg JSON → TOML wird das passende Format wiederhergestellt. - Comment-Preservation. Wer JSON5 als Ausgabe wählt und den Kommentar-Toggle aktiviert,
bekommt TOML-
#-Kommentare als//-Zeilen in den passenden JSON5-Positionen wieder. - Cargo/pyproject-Hinweise. Wenn dein TOML ein Cargo-Manifest oder pyproject.toml ist, blendet der Konverter Sanity-Hinweise ein — Pflichtfelder, unbekannte Schlüssel — ohne die Datei zu blockieren.
Wie funktioniert die Datetime-Fidelity?
TOML 1.0 unterscheidet vier Datetime-Typen, JSON kennt nur Strings. Beispiel: 2026-05-17 ist in
TOML ein LocalDate, also „dieser Tag, ohne Zeitzone-Kontext”. 2026-05-17T14:30:00+02:00 ist eine
OffsetDateTime, also „dieser Moment in Berliner Sommerzeit”. 14:30:00 ist eine LocalTime, also
„diese Uhrzeit, ohne Datum”. Wenn du diese vier Typen ohne Sondermaßnahmen in JSON konvertierst,
sind sie alle nur noch Strings — der Unterschied geht verloren, der Rückweg ist nicht mehr
eindeutig.
Der Datetime-Sidecar-Toggle löst das. Ist er aktiv, wird jeder Datetime-Wert in ein kleines Wrapper-
Objekt verpackt: {"$type":"toml/local-date","value":"2026-05-17"}. JSON-Konsumenten können den
Wrapper lesen wenn sie wollen, oder einfach .value rausziehen. Beim Rückweg JSON → TOML erkennt
der Konverter das $type-Feld und stellt die korrekte TOML-Syntax wieder her.
Wer den Sidecar nicht braucht — zum Beispiel weil das JSON von Hand gelesen wird oder die Daten in eine Datenbank fließen, die ISO-Strings akzeptiert — deaktiviert den Toggle. Dann werden alle vier Datetime-Typen zu plain ISO-Strings, mit dem Trade-off des Informationsverlusts.
JSON, JSON5 oder YAML — welches Format passt?
JSON ist der Standard und der Default. Für Maschinen-zu-Maschinen-Kommunikation, REST-APIs und Daten-Pipelines ist es die richtige Wahl. Der Output ist bytes-clean, JSON-Spec-konform und in jedem Parser einlesbar.
JSON5 ist eine praktische Erweiterung der JSON-Syntax, die Kommentare,
trailing-Kommas und unquoted Object-Keys erlaubt. Viele Build-Tools (TypeScript-tsconfig.json,
Babel-Config, Webpack-Config) lesen JSON5 nativ. Wenn du TOML zu JSON5 konvertierst und den
Kommentar-Toggle aktivierst, bekommst du eine Datei mit dem gleichen strukturellen Inhalt wie das
TOML-Original, plus aller #-Kommentare als //-Kommentare. Praktisch wenn die Datei in einem
JSON5-aware Build-Tool weiterlebt.
YAML ist die populärste Alternative zu TOML für Konfigurationsdateien. Wer von TOML zu YAML migrieren will (Kubernetes-Configs, Ansible-Playbooks, GitHub-Actions-Workflows), wählt YAML als Ausgabeformat. Der Konverter strippt automatisch die Datetime-Sidecars, weil YAML die vier Zeitstempel-Typen nicht differenziert — du bekommst plain ISO-Strings im YAML-Output.
Ein Migrations-Tipp: TOML → JSON5 ist verlustfrei (mit Sidecar + Kommentaren). TOML → YAML ist mit Verlust der Datetime-Typen. Wer also „nur kurz YAML sehen will” nutzt YAML, wer wirklich migrieren will, prüft die Datetime-Felder per Hand nach.
Wie helfen die Cargo.toml- und pyproject.toml-Hinweise?
Wenn der Konverter ein [package]-Block (Rust) oder ein [project]-Block (PEP 621) erkennt,
blendet er einen Hinweis-Banner ein. Der Banner ist nicht-blockierend — er schreibt dir nicht vor,
wie das Manifest aussehen muss, er weist nur auf Auffälligkeiten hin.
Cargo-Hinweise (laut Cargo Manifest Reference):
- Fehlende
nameoderversionim[package]-Block — beide sind Pflicht. - Falsch typisiertes
edition— sollte ein String wie"2021"sein, kein Integer. - Unbekannte Top-Level-Schlüssel außerhalb der Cargo-Standard-Tabellen (
[dependencies],[dev-dependencies],[build-dependencies],[features],[workspace],[bin],[lib],[profile],[patch],[badges]).
pyproject-Hinweise (laut PEP 621):
- Fehlender
nameim[project]-Block — Pflicht. - Fehlende
versionohnedynamic = ['version']-Eintrag — eines von beiden braucht es. - Fehlendes
requires-python— empfehlenswert, aber nicht Pflicht. - Unbekannte Top-Level-Schlüssel außerhalb von
[project],[build-system],[tool],[dependency-groups].
Der Sinn dieses Features: schneller Sanity-Check beim Schreiben oder Editieren von Manifesten, ohne
dass du cargo check oder python -m build --dry-run lokal aufrufen musst. Wenn die Hinweise
auftauchen, weißt du sofort, was du übersehen hast.
Wie visualisiert der Hierarchie-Tree die TOML-Struktur?
TOMLs größte UX-Schwäche ist die Lesbarkeit verschachtelter Tabellen. [server.database.replica]
liest sich auf den ersten Blick wie drei separate Tabellen, ist aber eine einzige tief geschachtelte
Hierarchie. Bei vielen [[products]]-Einträgen verliert man schnell die Übersicht, welcher Wert in
welchem Element steht.
Der Hierarchie-Tree im Side-Panel löst das. Sobald TOML geparst ist, zeigt der Tree die komplette
Struktur als kollabierbaren Baum mit Typ-Badges: str, int, float, bool, table, aot[]
für Array-of-Tables, dt+offset / dt / date / time für die vier Datetime-Typen. Bei aot[]
werden die einzelnen Array-Elemente als products[0], products[1] angezeigt — du siehst sofort,
welches Element welche Eigenschaft trägt.
Bei langen Strings wird ein Preview gekürzt ("Lorem ipsum..." → "Lorem ipsum dolor sit am…"),
damit der Tree übersichtlich bleibt. Bei verschachtelten Tabellen sind die Kinder einklappbar.
Was ist absichtlich nicht gebaut?
- Keine TOML-Validierung gegen vollständige Schemas. Cargo- und pyproject-Hinweise sind
Heuristiken — keine vollständige Manifest-Validierung. Wer das braucht, nutzt
cargo checkodervalidate-pyprojectlokal. Das Tool ist ein Konverter, kein Linter. - Kein TOML-Format-Auto-Fix. Key-Sortierung, Tabellen-Gruppierung, Whitespace-Reformat — alles Aufgaben, die ein dedizierter Formatter besser löst. Der Konverter respektiert die Eingabe- Struktur, ändert sie nicht.
- Keine v0.5-Backwards-Compat-Mode. TOML 0.5 hatte einige Quirks (homogene Arrays, andere Datetime- Syntax). Wir parsen v1.0-strikt und reichen tolerante Fehler-Hinweise raus — wer noch eine v0.5- Datei hat, aktualisiert sie zu v1.0 (die Spec ist seit 2021 stabil).
- Kein Server-Side-Big-File-Pipeline. Pure-client bedeutet, dass die Datei lokal verarbeitet wird. Bis ca. 10 MB ist das in jedem modernen Browser unproblematisch. Größere TOML-Dateien existieren in der Praxis fast nie — das ist kein typischer TOML-Use-Case.
- Keine syntax-erhaltende AST-Edit-UI. Wer TOML programmatisch ändert und exakt die ursprüngliche Formatierung erhalten will (z.B. dieselbe Whitespace-Konvention), nutzt einen TOML-Editor wie Taplo lokal. Wir parsen zu einem AST und re-emittieren — Whitespace-Erhaltung ist nicht das Ziel.
Wo finde ich mehr Details?
- TOML 1.0 Spec — die offizielle Spezifikation
- TOML auf Wikipedia — Geschichte und Eigenschaften
- JSON5 Spezifikation — die JSON-Erweiterung mit Kommentaren
- Cargo Manifest Reference — Rust-Manifest
- PEP 621 — pyproject.toml-Standard
- validate-pyproject — vollständige PEP-621-Validierung
Zuletzt aktualisiert: