TOML naar JSON omzetten

Hier zet je TOML naar JSON om, gratis en zonder account: sleep het bestand hierboven erin en binnen een paar seconden staat het resultaat klaar om te downloaden. De omzetting gebeurt binnen je eigen browser, dus het bestand wordt nooit geüpload. Het werkt hetzelfde op Windows, macOS en Linux als op iPhone en Android, en het blijft werken als je de verbinding verbreekt.

  • Waar het draait In je browser. Het bestand wordt nooit geüpload.
  • Zonder verlies Er gaat niets weg. JSON bewaart precies wat TOML bewaarde.
  • Maximale grootte Tot 100 MB per bestand, gratis en zonder account.

Tot 100 bestanden tegelijk. Verschillende formaten door elkaar is prima.

Een pyproject.toml lezen vanuit een toolketen zonder TOML-parser

TOML is al jaren de standaard voor Python- en Rust-packaging, en de tooling rond een repository heeft dat niet altijd bijgehouden. Een CI-stap met alleen jq beschikbaar, een Node-script dat de versie uit een Cargo.toml moet lezen, een dashboard dat afhankelijkheden telt over tweehonderd repositories — ze kunnen allemaal JSON lezen en geen van alle TOML zonder een nieuwe afhankelijkheid.

Dat is het geval waar deze omzetting voor werkt, en het werkt schoon omdat de twee datamodellen bijna volledig overlappen. TOML is een tabel van sleutel-waardeparen met nesting en arrays, wat een JSON-object met nesting en arrays is.

Tabellen, gepunte koppen en arrays van tabellen

Een kop tussen haakjes wordt een genest object, en een gepunte kop wordt meerdere niveaus diep genest — een kop geschreven voor een tool en daaronder een linter levert een object binnen een object op, zodat het JSON-pad de kop exact volgt.

Een kop tussen dubbele haakjes is de array van tabellen, en die wordt een JSON-array van objecten met één item per voorkomen. Daar staan de auteurs van een Python-pakket, de binaries van een Rust-crate en de doelen van een build in, en het is de constructie waar mensen het meest over piekeren en het minst hoeven te piekeren.

De datetimes die TOML heeft en JSON moet uitschrijven

TOML is het enige formaat in deze familie met echte tijdstypen: offset-datetimes, lokale datetimes, lokale datums en lokale tijden staan in de specificatie, en een parser geeft ze terug als datums. JSON heeft geen datumtype, dus elk wordt een string.

De waarden overleven met één addertje. Een offset-datetime behoudt zijn offset in plaats van te worden genormaliseerd naar UTC. Een lokale tijd krijgt een millisecondencomponent die hij niet had — een tijd geschreven als acht uur ’s ochtends komt terug met een fractioneel deel eraan vast.

Het geldige TOML-bestand dat deze omzetting weigert

TOML 1.0 vereist dat een implementatie 64-bit gehele getallen aankan. JSON-getallen zijn IEEE-doubles en zijn alleen exact tot ongeveer negen biljard. Een TOML-bestand met een geheel getal boven dat bereik is volkomen legaal, en de parser hier stopt met een foutmelding dat het getal niet verliesvrij kan worden weergegeven, in plaats van JSON te produceren met een verkeerd getal erin.

Weigeren is de juiste keuze. Een stilzwijgend afgerond identificatienummer is een fout die weken later opduikt in een koppeling die niets matcht. Bevat je TOML zo’n waarde, quote die dan als string in de bron.

Oneindig, niet-een-getal, en het onderscheid tussen geheel getal en drijvende komma

TOML-floats bevatten inf en nan als letterlijke waarden. JSON heeft geen van beide, en de serialiseerder schrijft null voor allebei. Dat is standaard JavaScript-gedrag en het is verliesgevend op een manier die nergens wordt gemeld — een geconfigureerde bovengrens van oneindig en een niet-ingestelde bovengrens worden hetzelfde in de JSON.

Het subtielere verlies is de typering. TOML onderscheidt een geheel getal van een drijvende komma, dus 1 en 1.0 zijn verschillende waarden met verschillende types, en een schema kan daarop vertrouwen. JSON heeft één getaltype, en 1.0 wordt geserialiseerd als 1.

Sleutelvolgorde, en het ene geval waarin die verandert

Tabellen en sleutels komen eruit in de volgorde waarin de TOML ze declareerde, wat een geconverteerd bestand leesbaar houdt en een diff tussen twee omzettingen betekenisvol maakt. De uitvoer heeft een inspringing van twee spaties en eindigt met een nieuwe regel.

De uitzondering zijn numerieke sleutels. Een gequote TOML-sleutel die een getal is — voorkomend in configuraties die dingen indexeren op jaar of poort — wordt vooraan zijn object herschikt en oplopend gesorteerd, omdat JavaScript-objecten geheeltalige sleutels zo ordenen.

Het resultaat bevragen zodra je het hebt

De uitvoer is gewone JSON, dus jq leest hem zonder vlaggen: een projectversie ophalen, afhankelijkheidsnamen tonen of controleren of een tool-sectie bestaat zijn allemaal eenregelige expressies.

Het opent ook validatie. JSON Schema is volwassen en breed geïmplementeerd, en TOML heeft geen schemataal in zijn specificatie, dus converteren en dan valideren is een echte manier om huisregels af te dwingen over veel repositories — elk pakket moet een licentie hebben, elke crate moet zijn editie vastpinnen.

Waarom de opmerkingen de TOML tot bron van waarheid maken

TOML ondersteunt opmerkingen en gebruikt ze veelvuldig: de reden waarom een afhankelijkheid vastgezet is, het ticketnummer naast een workaround, het blok dat uitlegt bij welke omgeving een instelling hoort. JSON heeft onder RFC 8259 geen opmerkingsyntaxis, dus niets daarvan komt aan.

Dat bepaalt de richting van de relatie. De TOML is het bestand dat mensen bewerken en beoordelen, en de JSON wordt gegenereerd wanneer iets het moet lezen. De JSON naast de TOML in de repository zetten creëert twee versies van de waarheid die uit elkaar zullen groeien.

Wanneer je in plaats daarvan een TOML-parser installeert

Gebeurt het lezen binnen een applicatie in plaats van een buildstap, gebruik dan een parser. Elke grote taal heeft er een — Python heeft al enkele versies tomllib in de standaardbibliotheek, en Rust, Go en JavaScript hebben goed onderhouden opties.

De converter verdient zijn plek aan de rand: een eenmalige inspectie, een CI-stap waar een afhankelijkheid toevoegen meer moeite is dan het waard, of een pijplijn waarvan de volgende fase alleen JSON spreekt. Alles draait in je browser, dus een privéconfiguratie met inloggegevens erin is hier veilig neer te zetten.

Zo zet je TOML naar JSON om

  1. Sleep je TOML-bestand op deze pagina, of klik om er een te kiezen.
  2. Kies JSON als doel. De omzetting gebeurt in je browser en het bestand wordt niet geüpload.
  3. Download het klare JSON-bestand.

TOML of JSON: wat er verandert

TOML vergeleken met JSON
TOMLJSON
Volledige naamTom's Obvious Minimal LanguageJavaScript Object Notation
Bestandsextensie.toml.json
Mediatypeapplication/tomlapplication/json
Voor het eerst gepubliceerd20132001
SpecificatieTOML 1.0RFC 8259
LicentieOpen standaardOpen standaard
Stand van zakenActueelActueel
Opent in een browserGeen browserElke browser
In plaats daarvan overwogenYAML, INIXML, YAML, NDJSON

Wat verloren gaat

Opmerkingen gaan niet mee. In TOML kun je een bestand van uitleg voorzien en JSON heeft daar geen syntaxis voor, dus elke toelichtende regel vervalt — en dat raakt juist de bestanden die van commentaar worden voorzien: configuratie die iemand anders moet bijhouden.

Wat behouden blijft

Er gaat niets verloren. TOML en JSON bewaren hun inhoud verliesvrij: de omzetting wisselt de verpakking, niet de kwaliteit, en je kunt haar herhalen zonder dat schade zich opstapelt.

Het resultaat openen

JSON opent in elke actuele browser. TOML komt nog minder ver. Gaat het bestand naar een webpagina of een formulier, dan is dat meestal de hele reden voor de omzetting.

Visual Studio Code leest zowel TOML als JSON, dus je kunt het resultaat naast het origineel leggen zonder een tweede programma.

Waarvoor elk formaat bedoeld is

De twee mikken op ander werk: TOML op bewerken, JSON op gegevens tussen programma’s verplaatsen en het web. Dat is het afwegen waard, want de reden dat het ene bestaat is meestal de reden dat het andere onhandig is.

TOML verscheen in 2013. Het is vastgelegd in TOML 1.0, en dat is de moeite waard als het bestand het gereedschap moet overleven dat het schreef.

JSON stamt uit 2001, vastgelegd in RFC 8259. Visual Studio Code, jq en Postman lezen het formaat.

Van TOML naar JSON: veelgestelde vragen

Wordt mijn TOML-bestand ergens heen geüpload?

Nee. Deze omzetting gebeurt volledig in je browser, dus het bestand verlaat je apparaat niet. Je kunt het zelf nagaan: open het netwerktabblad van de ontwikkelaarshulpmiddelen en zet iets om. Je ziet de pagina zelf en de verzoeken voor statistiek en advertenties waarmee deze dienst betaald wordt, en geen enkel verzoek dat je bestand meeneemt.

Is TOML naar JSON omzetten gratis?

Ja. Geen account, geen watermerk en geen dagtegoed dat opraakt: het draait op je eigen machine, dus je mag zo vaak terugkomen als je wilt. De browser verwerkt bestanden tot 100 MB, 100 tegelijk.

Gaat er kwaliteit verloren bij het omzetten van TOML naar JSON?

Nee. JSON bewaart dezelfde inhoud zonder iets weg te gooien: het resultaat is in kwaliteit identiek aan het origineel.

Is TOML naar JSON verliesvrij?

Er gaat niets verloren. TOML en JSON bewaren hun inhoud verliesvrij: de omzetting wisselt de verpakking, niet de kwaliteit, en je kunt haar herhalen zonder dat schade zich opstapelt.

Blijven opmerkingen behouden van TOML naar JSON?

Opmerkingen gaan niet mee. In TOML kun je een bestand van uitleg voorzien en JSON heeft daar geen syntaxis voor, dus elke toelichtende regel vervalt — en dat raakt juist de bestanden die van commentaar worden voorzien: configuratie die iemand anders moet bijhouden.

Meer over deze formaten