TOML-zu-JSON-Konverter
TOML-Konfiguration in das JSON-Format konvertieren.
Geprüft von ZeroUtil Editorial Team · Zuletzt geprüft
So verwendest du den TOML-zu-JSON-Konverter
- TOML einfügen in den Eingabebereich. Eine Rust-
Cargo.toml, eine Python-pyproject.toml, eine Hugo-config.tomloder ein Black-/Ruff-Konfigurationsabschnitt funktionieren alle. - Ausgabeformatierung wählen: 2-Leerzeichen-JSON für Lesbarkeit, 4-Leerzeichen für konservatives Tooling oder minifiziert für Wire-Format-Verwendung.
- "Konvertieren" drücken. Abschnitts-Header werden zu verschachtelten Objekten, Arrays von Tabellen kollabieren zu JSON-Arrays, und typisierte Werte (Ganzzahlen, Gleitkommazahlen, Datumsangaben, Boolesche Werte) werden auf ihre JSON-Äquivalente abgebildet.
- Das JSON kopieren in ein nachgelagertes Werkzeug, das TOML nicht nativ versteht - einen JSON-Schema-Validator, eine generische Konfigurationsbibliothek oder ein kleines Skript, das die strukturierten Daten benötigt.
Was das Werkzeug verarbeitet
TOML lässt sich sauber nach JSON abbilden, weil beide hierarchische Schlüssel-Wert-Formate sind. Der Konverter liest die Quelle Zeile für Zeile und hält einen aktuellen-Tabellen-Zeiger, der am Wurzelobjekt beginnt. Ein barer Header wie [package] erstellt oder wählt package als aktuelle Tabelle; ein Punkt-Header wie [tool.poetry] navigiert zu einem verschachtelten Objekt. Array-von-Tabellen-Header [[dependencies]] fügen ein neues leeres Objekt an das Array an diesem Schlüssel an und machen es zur aktuellen Tabelle für die folgenden Zeilen. Inline-Tabellen { name = "foo", version = "1.0" } erzeugen reguläre verschachtelte JSON-Objekte.
Skalare Typisierung entspricht der TOML-Spezifikation. Ganzzahl-Literale bewahren ihre Basis für Anzeigezwecke, kollabieren aber zu Dezimal in JSON. Gleitkommazahlen behalten die Dezimalform. Offset-DateTimes (1979-05-27T07:32:00Z) und lokale DateTimes werden zu ISO-8601-JSON-Zeichenketten, weil JSON keinen nativen Datumstyp hat. Basis-Zeichenketten ("...") interpretieren Escape-Sequenzen, Literal-Zeichenketten ('...') nicht. Mehrzeilige Basis-Zeichenketten entfernen den ersten Zeilenumbruch falls vorhanden, entsprechend den TOML-Regeln. Boolesche Werte sind die literalen Kleinbuchstaben true und false.
Praktische Situationen
- Die
Cargo.tomleines Projekts in ein Skript lesen, das Abhängigkeitsgraphen in einer anderen Sprache als Rust analysiert. pyproject.tomlin einen JSON-Schema-basierten Linter oder eine Veröffentlichungspipeline einspeisen, die JSON-Konfiguration erwartet.- Hugo- oder Zola-Site-Konfiguration in JSON für ein statisches Analyse-Werkzeug konvertieren.
- Den
[tool.black]- oder[tool.ruff]-Abschnitt extrahieren, um ihn durch einen JSON-Patch-basierten Konfigurations-Merger zu führen. - Eine falsch eingetippte TOML-Datei debuggen, indem man sieht, welche Struktur sie tatsächlich parst - JSON-Ausgabe macht die Form offensichtlich.
- Eine kleine Konfiguration in eine JavaScript-Anwendung einbetten, die beim Start bereits JSON parst.
Dinge, die schiefgehen können
- Eine Tabelle neu definieren. TOML verbietet das zweimalige Definieren derselben Tabelle.
[a]gefolgt von einem späteren[a]sollte ein Parse-Fehler sein; ein permissiver Parser könnte sie zusammenführen. - Punkt-Schlüssel und Tabellen-Header mischen. Wenn man
a.b.c = 1und dann einen[a.b]-Header geschrieben hat, konfligieren die beiden Stile der Spezifikation nach. Einen Stil pro Abschnitt wählen. - DateTime ohne Zeitzone. TOML unterscheidet Offset-, lokale und nur-Datum-Werte. JSON verliert diese Unterscheidung - alle werden zu Zeichenketten. Wenn der ursprüngliche Typ rekonstruiert werden muss, die rohe Zeichenkette bewahren und sie mit einer TOML-bewussten Bibliothek nachgelagert parsen.
- Ganzzahlen außerhalb des 64-Bit-Bereichs. TOML erlaubt 64-Bit-Ganzzahlen mit Vorzeichen. JavaScript-Zahlen sind 64-Bit-Gleitkommazahlen, sodass sehr große Ganzzahlen (über
Number.MAX_SAFE_INTEGER, etwa 9 Billiarden) während des Parsens Präzision verlieren. - Nicht-ASCII in baren Schlüsseln. TOML erlaubt Unicode-Buchstaben in baren Schlüsseln. Einige nachgelagerte Werkzeuge erwarten nur ASCII-JSON-Schlüssel; die Toleranz des Ziels vor der Konvertierung prüfen.
Die TOML-Spezifikation in Kurze
TOML ("Tom's Obvious Minimal Language") wurde von Tom Preston-Werner, Mitbegründer von GitHub, erstellt. Version 1.0.0 wurde im Januar 2021 eingefroren und ist unter toml.io/en/v1.0.0 spezifiziert. Das Design-Ziel ist ein Konfigurationsformat, das für einen menschlichen Leser offensichtlich ist, zwischen Typen unterscheidet (anders als reine Umgebungsvariablen-Konfigurationen) und eine minimale Grammatik hat (anders als YAML). Jeder TOML-Wert ist eines von: Zeichenkette, Ganzzahl, Gleitkommazahl, Boolean, Offset-DateTime, lokale DateTime, lokales Datum, lokale Zeit, Array oder Tabelle. Tabellen sind ungeordnete Schlüssel-Wert-Paare-Sammlungen; Arrays von Tabellen ermöglichen das Ausdrücken von Listen ähnlicher Objekte. Die Konformitätstest-Suite unter BurntSushi/toml-test ist die Branchen-Referenz für Parser-Korrektheit.
Alternative Werkzeuge
Kommandozeilen-Nutzer haben tomljson (Teil von toml-cli), dasel und neuere Versionen von yq mit TOML-Unterstützung. Pythons Standardbibliothek fügte tomllib in Python 3.11 für das Lesen von TOML hinzu; tomli_w bearbeitet die andere Richtung. Rust-Projekte verwenden die toml-Kiste von Alex Crichton, die kampferprobt ist. Go hat pelletier/go-toml. Für Produktions-Konvertierungen eine dieser Bibliotheken wählen, weil sie die vollständige Konformitätstest-Suite bestehen; dieses Browser-Werkzeug deckt die häufigen 90 % von TOML ohne die Sonderfälle rund um Escapes in mehrzeiligen Literal-Zeichenketten und extreme DateTime-Präzision ab. Für eine Cargo.toml oder pyproject.toml, die man gerade inspizieren möchte, ist das Web-Werkzeug meist ausreichend.
Häufig gestellte Fragen
Welche TOML-Version unterstützt der Parser?
TOML 1.0.0, veröffentlicht im Januar 2021. Frühere 0.x-Versionen hatten leicht unterschiedliche Regeln für Schlüssel mit Punkten, wie Arrays mit gemischten Typen behandelt wurden und wie Datumsangaben dargestellt wurden. Wenn die Quelle aus einer Pre-1.0-Rust-Kiste oder einer alten Cargo-Datei stammt, funktionieren die meisten Dinge noch, aber Sonderfälle rund um Arrays mit gemischten Typen oder nicht standardisierte Datumformate werden möglicherweise nicht sauber konvertiert. Die Quelldatei aktualisieren, wenn möglich.
Wie werden Datums- und Zeitwerte in JSON dargestellt?
JSON hat keinen nativen Datumstyp, daher werden alle vier temporalen TOML-Varianten (Offset-DateTime, lokale DateTime, lokales Datum, lokale Zeit) zu ISO-8601-Zeichenketten, die ihre ursprungliche Textform bewahren. Ein lokales Datum wie <code>1979-05-27</code> wird zur JSON-Zeichenkette <code>"1979-05-27"</code>; ein Offset-DateTime wie <code>1979-05-27T07:32:00-08:00</code> behält seinen Offset. Diese können mit <code>new Date()</code> in JavaScript oder <code>datetime.fromisoformat</code> in Python erneut geparst werden.
Unterstutzt der Konverter Arrays von Tabellen?
Ja. Die <code>[[server]]</code>-Syntax erstellt ein JSON-Array, dessen Elemente die zwischen jedem Paar doppelter Klammern definierten Objekte sind. Das ist das Muster, das Cargo für <code>[[bin]]</code>-Ziele und Poetry für <code>[[tool.poetry.source]]</code>-Quellen verwendet. Jeder Doppelklammer-Header beginnt ein neues Objekt; die danach gesetzten Schlüssel befüllen es bis zum nächsten Header.
Ist die Konvertierung verlustbehaftet?
In einigen Randfällen ja. Ganzzahlwerte größer als <code>Number.MAX_SAFE_INTEGER</code> (etwa 9 Billiarden) verlieren Präzision, weil JavaScript Doubles mit doppelter Genauigkeit verwendet. Temporale Typen kollabieren zu Zeichenketten und verlieren ihren nativen Typ. Kommentare verschwinden, weil JSON keine hat. Für 99 % der echten <code>Cargo.toml</code>-, <code>pyproject.toml</code>- oder Hugo-Konfigurationen stoßen diese Grenzen nicht auf.
Verlasst mein TOML den Browser?
Nein. Der Konverter läuft in einer mit der Seite gebündelten Preact-Komponente; ein Klick auf "Konvertieren" ruft eine lokale JavaScript-Funktion auf. Es wird kein Fetch-Aufruf an einen externen Dienst gemacht, und die Eingabe wird nirgendwo protokolliert. Das ist wichtig, weil TOML-Konfigurationen häufig Zugangstokens, API-Schlüssel und SSH-Endpunkte enthalten, die man nicht an einen anonymen Dienst senden möchte.
Was passiert mit Inline-Tabellen in Arrays?
Eine Inline-Tabelle <code>{ a = 1, b = 2 }</code> in einem Array wird zu einem regularen JSON-Objekt in einem JSON-Array. Inline-Tabellen sind in TOML 1.0.0 vollständig unveränderlich - man kann ihnen nach der schließenden Klammer keine Schlüssel hinzufügen -, aber das beeinflusst die JSON-Ausgabe nicht, weil JSON zum Parse-Zeitpunkt kein Veränderlichkeits-Konzept hat.
Wie werden mehrzeilige Zeichenketten behandelt?
Mehrzeilige Basis-Zeichenketten (<code>"""..."""</code>) interpretieren Backslash-Escapes und entfernen den ersten Zeilenumbruch, wenn er unmittelbar nach den öffnenden Anführungszeichen folgt. Mehrzeilige Literal-Zeichenketten (<code>'''...'''</code>) bewahren ihre Inhalte einschließlich Backslashes. Beide enden als Standard-JSON-Zeichenketten, wobei eingebettete Zeilenumbrüche als <code>\\n</code>-Escapes dargestellt werden.
Kann ich mit demselben Werkzeug JSON zurück in TOML konvertieren?
Nicht auf dieser Seite. JSON zu TOML ist eine separate Konvertierung, weil die Struktur von TOML (Tabellen, Arrays von Tabellen, Punkt-Schlüssel) nicht eins-zu-eins aus dem einfacheren Objekt/Array-Modell von JSON abgeleitet wird. Es gibt Entscheidungen zu treffen - soll ein tief verschachteltes Objekt ein Punkt-Header oder eine Reihe verschachtelter Tabellen sein? Für diese Richtung <code>tomlkit</code> oder <code>tomli_w</code> in Python verwenden.
Was ist der Unterschied zwischen einem Punkt-Schlüssel und einem Abschnitts-Header?
Beide erzeugen verschachtelte JSON-Objekte, sehen aber in der Quelle unterschiedlich aus. <code>a.b.c = 1</code> auf der obersten Ebene ist ein Punkt-Schlüssel, der <code>{"a":{"b":{"c":1}}}</code> erstellt. Ein Abschnitts-Header <code>[a.b]</code> gefolgt von <code>c = 1</code> erzeugt dieselbe Struktur, schränkt aber nachfolgende Schlüssel auf den <code>a.b</code>-Namensraum ein. Im Konverter führen beide zum identischen JSON.
Warum sollte ich TOML statt YAML oder JSON verwenden?
TOML trifft die Mitte: eine strengere, lesbarere Grammatik als YAML (keine Einrückungs-Regeln, weniger Stolperfallen) und reichhaltigere Typen als JSON (Datumsangaben, mehrzeilige Zeichenketten). Es ist auch weniger mehrdeutig - TOML hat meist einen Weg, Dinge auszudrücken, während YAML mehrere hat. Deshalb hat das Rust-Ökosystem es für Cargo standardisiert und PEP 621 es für <code>pyproject.toml</code> übernommen. Der Kompromiss ist weniger weit verbreitete Bibliotheksunterstützung als JSON oder YAML.
Verwandte Tools
- YAML-zu-JSON-Konverter
YAML sofort in das JSON-Format umwandeln.
- JSON-zu-YAML-Konverter
JSON sofort in YAML-Format konvertieren.
- CSV-zu-JSON-Konverter
CSV-Daten in das JSON-Array-Format konvertieren.
- JSON-zu-CSV-Konverter
Konvertiere JSON-Arrays in das CSV-Format mit benutzerdefinierten Trennzeichen.
- JSON-Formatter
JSON formatieren, validieren und minimieren mit Syntaxhervorhebung.
- HTML-zu-JSX-Konverter
HTML in JSX umwandeln mit automatischer Attribut-Konvertierung.
Mehr Developer Tools
AI Token Counter
Count tokens for GPT-4o, Claude, and Gemini models instantly.
Open toolBase64 Encoder & Decoder
Encode UTF-8 text to Base64 online or decode Base64 back to UTF-8 and plain text. Runs in your browser with no upload.
Open toolBulk URL Encode / Decode
Encode or decode many URLs at once. Paste a newline-separated list and the tool processes each line in parallel, preserving order and blank lines.
Open toolchmod Calculator
Calculate and convert Unix file permission modes between octal and symbolic.
Open toolCode Screenshot
Create beautiful code snippet images with customizable themes.
Open toolColor Converter
Convert colors between HEX, RGB, HSL and CMYK formats.
Open tool