TOML zu JSON

Die Cargo.toml von Rust, die pyproject.toml von Python, die config.toml von Hugo: TOML ist in der modernen Konfigurationswelt allgegenwärtig, doch viele Werkzeuge sprechen weiterhin nur JSON. Füge dein TOML hier ein und erhalte formatiertes JSON zurück: [Tabellen]-Abschnitte werden zu verschachtelten Objekten, [[Arrays von Tabellen]] zu Arrays von Objekten, und Datumswerte werden unverändert als Strings durchgereicht. Der Parser deckt den Alltagskern von TOML ab; seine echten Grenzen (mehrzeilige Werte, Inline-Tabellen, gepunktete Schlüssel) sind unten offen aufgelistet.

So funktioniert die Konvertierung

  1. 1

    TOML einfügen

    Füge den Text in das Eingabefeld ein und klicke auf In JSON konvertieren. Ganzzeilige #-Kommentare werden automatisch übersprungen.

  2. 2

    Tabellen werden zu Objekten

    Eine `[server.database]`-Überschrift wird zu verschachtelten JSON-Objekten, eine Ebene pro gepunktetem Namen.

  3. 3

    Arrays von Tabellen werden zu Arrays

    `[[users]]`-Blöcke erzeugen ein JSON-Array mit einem Objekt pro Block.

  4. 4

    Skalare Werte behalten ihren Typ

    Strings in Anführungszeichen, einfache dezimale Ganz- und Fließkommazahlen sowie true/false werden zu nativen JSON-Typen; Datumswerte bleiben Strings, exakt wie geschrieben.

  5. 5

    JSON kopieren

    Das Ergebnis ist mit 4 Leerzeichen Einrückung formatiert, die Schlüssel stehen in ihrer ursprünglichen Reihenfolge, bereit zum Kopieren.

So werden die Typen abgebildet

TOML-Wert JSON-Wert Beispiel
String (basic oder literal) String "hello" → "hello"
Ganzzahl (einfach dezimal) Number 42 → 42
Fließkommazahl (einfach dezimal) Number 3.14 → 3.14
Boolean Boolean true → true
Array (einzeilig) Array [1, 2, 3] → [1, 2, 3]
Tabelle mit Schlüsseln Objekt [server] + port = 8080 → "server": {"port": 8080}
Array von Tabellen Array von Objekten [[users]] + name = "alice" → "users": [{"name": "alice"}]
Datum/Uhrzeit String, wie geschrieben 2026-04-18T10:00:00Z → "2026-04-18T10:00:00Z"

Die Ausgabe wird immer mit 4 Leerzeichen Einrückung formatiert, Arrays und Objekte erstrecken sich also über mehrere Zeilen; die Tabelle oben zeigt die Werte der Lesbarkeit halber einzeilig. Die Schlüsselreihenfolge bleibt exakt so erhalten, wie sie in deinem TOML steht.

Durchgerechnetes Beispiel

title = "My App"

[server]
host = "localhost"
port = 8080

[[users]]
name = "alice"
admin = true

wird zu:

{
    "title": "My App",
    "server": {
        "host": "localhost",
        "port": 8080
    },
    "users": [
        {
            "name": "alice",
            "admin": true
        }
    ]
}

Unterstütztes TOML und die echten Grenzen

Unterstützt: [Tabellen]-Überschriften einschließlich gepunkteter Abschnittsnamen, [[Arrays von Tabellen]], einzeilige key = value-Paare, Basic-Strings "..." mit den Escapes \n, \t und \", Literal-Strings '...', einfache dezimale Ganz- und Fließkommazahlen, true/false, einzeilige Arrays (Verschachtelung erlaubt), ganzzeilige #-Kommentare sowie Datumswerte, die als Strings durchgereicht werden.

Nicht unterstützt, und was stattdessen zu tun ist:

  • Mehrzeilige Strings (""" oder ''') und mehrzeilige Arrays stoppen den Parser mit einem Fehler. Bringe den Wert zuerst auf eine einzige Zeile.
  • Inline-Tabellen werden nicht aufgelöst: point = { x = 1, y = 2 } kommt als String "{ x = 1, y = 2 }" heraus, nicht als Objekt. Schreibe sie als eigenen [point]-Abschnitt. Cargo.toml-Abhängigkeitszeilen wie serde = { version = "1.0" } sind der Klassiker.
  • Gepunktete Schlüssel links vom Gleichheitszeichen bleiben ein flacher Schlüssel: server.host = "a" erzeugt den Schlüssel "server.host", keine Verschachtelung. Nutze stattdessen eine [server]-Überschrift. Gepunktete [abschnitts.namen] in Überschriften verschachteln dagegen korrekt.
  • Kommentare hinter einem Wert werden nicht entfernt: port = 8080 # main wird zum String "8080 # main". Lass Kommentare auf eigenen Zeilen stehen.
  • Zahlformate jenseits einfacher Dezimalzahlen werden nicht erkannt: 1_000, 0xFF, 5e2, +99, inf und nan kommen als Strings in Anführungszeichen heraus. Schreibe stattdessen 1000, 255, 500, 99.
  • \uXXXX-Escapes in Basic-Strings werden nicht dekodiert. Füge stattdessen das echte Zeichen ein.

Für ein vollständiges TOML-1.0-Dokument nutze einen Kommandozeilen-Konverter wie toml2json, oder lade die Datei mit Pythons tomllib und gib von dort JSON aus.

Wofür das nützlich ist

  • Schnelle Kontrolle eines TOML-Fragments als JSON beim Debuggen.
  • Einfache Konfigurationswerte an Linter, Skripte oder Inventarwerkzeuge übergeben, die nur JSON akzeptieren.
  • JSON-Testfixtures erzeugen aus TOML-Notizen, die sich leichter von Hand schreiben lassen.
  • Kleine, flache Konfigurationsdateien migrieren, was auf viele config.toml von Hugo zutrifft.

Hinweise zur Hin- und Rückreise

  • Kommentare überleben nie: JSON kennt schlicht keine Kommentarsyntax.
  • Datumswerte bleiben Strings; nachgelagerter Code muss sie wieder in Datumsobjekte umwandeln.
  • Große Zahlen: Ganzzahlen bleiben im JSON-Text 64-Bit-Werte, aber JavaScript-Konsumenten verlieren oberhalb von 2^53 an Präzision. Achte auf Nanosekunden-Zeitstempel und numerische IDs.
  • Die Schlüsselreihenfolge bleibt bei diesem Konverter wie geschrieben; andere JSON-Werkzeuge können Schlüssel beim erneuten Ausgeben umsortieren.

Umgekehrte Richtung

JSON → TOML ist die schwierigere Reise, denn JSON hat Strukturen (tiefe anonyme Verschachtelung, null), die TOML entweder fehlen oder die es anders behandelt. Die meisten Roundtrip-Szenarien brauchen manuelle Anpassungen auf der TOML-Seite.

Häufig gestellte Fragen

Nein. JSON kennt keine Kommentarsyntax, ganzzeilige #-Kommentare werden daher einfach übersprungen. Eine Warnung: Ein Kommentar hinter einem Wert wird nicht entfernt, aus port = 8080 # main wird der String “8080 # main”. Lass Kommentare vor der Konvertierung auf eigenen Zeilen stehen.

Nein. Es deckt den Alltagskern ab: Tabellen mit gepunkteten Abschnittsnamen, Arrays von Tabellen, einzeilige key = value-Paare, Strings in Anführungszeichen, einfache Dezimalzahlen, Booleans, einzeilige Arrays und ganzzeilige Kommentare. Mehrzeilige Strings und Arrays, Inline-Tabellen, gepunktete Schlüssel und Zahlformate wie 1_000 oder 0xFF werden nicht unterstützt. Für Dokumente nach voller Spezifikation nimm ein CLI-Werkzeug wie toml2json oder Pythons tomllib.

Typische Konfigurationsdateien werden sofort konvertiert. Die Konvertierung läuft auf unserem Server, extrem große Dokumente sind daher durch die Größe der Anfrage begrenzt; für TOML im Multi-Megabyte-Bereich passt ein Kommandozeilen-Konverter besser.

Ja, dieser Konverter arbeitet serverseitig: Das TOML wird über HTTPS an unseren Server geschickt, dort konvertiert und kommt in derselben Antwort zurück. Der Inhalt wird danach nicht gespeichert; es bleibt nur ein anonymer Nutzungszähler. Füge keine Geheimnisse wie Passwörter oder API-Schlüssel ein.

Verwandte Tools

Tool in anderen Sprachen verfügbar