Convertir TOML en JSON

Vous pouvez convertir TOML en JSON gratuitement et sans compte : déposez le fichier ci-dessus et, une ou deux secondes plus tard, le résultat est prêt à télécharger. La conversion se fait dans votre propre navigateur : le fichier n’est donc jamais téléversé. Cela marche sous Windows, macOS et Linux comme sur iPhone et Android, et continue de marcher si vous coupez le réseau.

  • Où cela s’exécute Dans votre navigateur. Le fichier n’est pas téléversé.
  • Sans perte Rien ne se perd. JSON contient exactement ce que contenait TOML.
  • Limite de taille Jusqu’à 100 Mo par fichier, gratuitement et sans compte.

Jusqu’à 100 fichiers à la fois. Les formats mélangés ne posent pas de problème.

Lire un pyproject.toml depuis une chaîne d’outils qui n’a pas de parseur TOML

TOML est le standard pour le packaging Python et Rust depuis des années, et l’outillage autour d’un dépôt n’a souvent pas suivi. Une étape de CI avec jq disponible et rien d’autre, un script Node qui doit lire la version dans un Cargo.toml, un tableau de bord qui inventorie les dépendances dans deux cents dépôts — tous peuvent lire du JSON et aucun ne peut lire du TOML sans une nouvelle dépendance.

C’est le cas que cette conversion sert, et cela marche proprement parce que les deux modèles de données se chevauchent presque entièrement. TOML est une table de paires clé-valeur avec imbrication et tableaux, ce qui est un objet JSON avec imbrication et tableaux. Les parties intéressantes sont les quatre endroits où TOML sait quelque chose que JSON ignore.

Tables, headers pointés et arrays of tables

Un header entre crochets devient un objet imbriqué, et un header pointé devient une imbrication sur plusieurs niveaux — un header écrit pour un outil puis un linter en dessous produit un objet dans un objet, donc le chemin JSON correspond exactement au header. Rien dans la structure n’a besoin d’être interprété.

Un header à double crochets est l’array of tables, et il devient un tableau JSON d’objets avec une entrée par occurrence. C’est ce qui contient les auteurs d’un paquet Python, les binaires d’un crate Rust et les cibles d’un build, et c’est la construction dont les gens s’inquiètent le plus et dont ils ont le moins besoin de s’inquiéter. L’ordre est préservé.

Les datetimes que TOML a et que JSON doit épeler

TOML est le seul format de cette famille avec de vrais types temporels : offset datetimes, local datetimes, local dates et local times sont dans la spécification, et un parseur les renvoie comme des dates. JSON n’a pas de type date du tout, donc chacun devient une chaîne.

Les valeurs survivent avec un accroc. Un offset datetime garde son offset plutôt que d’être normalisé en UTC, ce qui est un meilleur comportement que plusieurs autres conversions sur ce site. Une local date arrive exactement comme écrite. Un local time gagne une composante milliseconde qu’il n’avait pas — une heure écrite huit heures du matin arrive avec une partie fractionnaire attachée. Si quelque chose en aval compare ces chaînes plutôt que de les parser, ce suffixe en plus est ce qui cassera la comparaison.

Le fichier TOML valide que cette conversion refuse de convertir

TOML 1.0 exige d’une implémentation qu’elle gère les entiers 64 bits signés. Les nombres JSON sont des doubles IEEE et ne sont exacts que jusqu’à environ neuf trillions. Un fichier TOML contenant un entier au-dessus de cette plage est entièrement légal, et le parseur ici s’arrête avec une erreur disant que l’entier ne peut pas être représenté sans perte plutôt que de produire du JSON avec un nombre faux dedans.

Refuser est la bonne décision et cela mérite d’être compris plutôt que contourné à l’aveugle. Un identifiant silencieusement arrondi est un bogue qui se manifeste des semaines plus tard dans une jointure qui ne correspond à rien. Si votre TOML contient une valeur de cette taille — un ID snowflake, un grand numéro de série, un horodatage nanoseconde comme entier — mettez-la entre guillemets comme chaîne dans la source. Ce n’était jamais une quantité, et la mettre entre guillemets rend tout consommateur en aval correct d’un coup.

Infini, pas-un-nombre, et la distinction entier-flottant

Les flottants TOML incluent inf et nan comme valeurs littérales. JSON n’a ni l’un ni l’autre, et le sérialiseur écrit null pour les deux. C’est le comportement JavaScript standard et c’est destructeur d’une manière que rien ne signale — une limite supérieure configurée à l’infini et une limite non configurée deviennent la même chose dans le JSON.

La perte plus subtile est le typage. TOML distingue un entier d’un flottant, donc 1 et 1.0 sont des valeurs différentes avec des types différents, et un schéma ou une application peut s’y fier. JSON n’a qu’un type nombre, et 1.0 est sérialisé comme 1. Si un consommateur du JSON a besoin de savoir qu’une valeur a été déclarée comme flottant, cette information doit voyager par un autre canal, parce qu’elle n’est plus dans le fichier.

L’ordre des clés, et le seul cas où il change

Les tables et les clés sortent dans l’ordre où TOML les a déclarées, ce qui garde un fichier converti lisible et garde un diff entre deux conversions signifiant quelque chose. La sortie est indentée de deux espaces et se termine par un retour à la ligne.

L’exception est les clés numériques. Une clé TOML entre guillemets qui est un nombre — ce qui apparaît dans des configs qui indexent des choses par année ou par port — est réordonnée avant toutes les autres clés de son objet et triée en ascendant, parce que c’est ainsi que les objets JavaScript ordonnent les clés de type entier. C’est le seul endroit où le JSON ne se lit pas dans le même ordre que la source.

Interroger le résultat une fois que vous l’avez

La sortie est du JSON ordinaire, donc jq la lit sans drapeau : extraire une version de projet, lister des noms de dépendances ou vérifier qu’une section d’outil existe sont autant d’expressions d’une ligne. C’est en général toute la raison du détour, et cela transforme un script shell qui allait grepper un fichier TOML en un script qui l’interroge proprement.

Cela ouvre aussi la validation. JSON Schema est mature et largement implémenté, et TOML n’a pas de langage de schéma dans sa spécification, donc convertir puis valider est une vraie manière d’imposer des règles maison à travers de nombreux dépôts — chaque paquet doit déclarer une licence, chaque crate doit épingler son édition — qui ne peuvent pas être vérifiées contre le TOML directement.

Pourquoi les commentaires font du TOML la source de vérité

TOML supporte les commentaires et les utilise abondamment : la raison pour laquelle une dépendance est épinglée, le numéro de ticket à côté d’un contournement, le bloc qui explique à quel environnement un réglage s’applique. JSON n’a pas de syntaxe de commentaire sous RFC 8259, donc rien de tout cela n’arrive.

Cela tranche la direction de la relation. Le TOML est le fichier que les gens éditent et révisent, et le JSON est généré à partir de lui chaque fois que quelque chose a besoin de le lire. Cocher le JSON dans le dépôt à côté du TOML crée deux versions de la vérité qui vont diverger ; le générer à l’étape de build ne le fait pas.

Quand installer un parseur TOML à la place

Si la lecture se passe à l’intérieur d’une application plutôt que dans une étape de build, utilisez un parseur. Chaque langage majeur en a un — Python a tomllib dans sa bibliothèque standard depuis plusieurs versions, et Rust, Go et JavaScript ont tous des options bien maintenues. Lire le fichier directement garde les types temporels et la distinction entier-flottant que cette conversion aplatit.

Le convertisseur gagne sa place à la frontière : une inspection ponctuelle, une étape de CI où ajouter une dépendance coûte plus que cela ne vaut, ou un pipeline dont l’étape suivante ne parle que JSON. Tout tourne dans votre navigateur, donc une config privée avec des identifiants dedans peut être déposée ici sans risque, et le plafond gratuit de 100 Mo est bien au-delà de tout fichier de configuration.

Comment convertir TOML en JSON

  1. Déposez votre fichier TOML sur cette page, ou cliquez pour en choisir un.
  2. Choisissez JSON comme destination. La conversion se fait dans votre navigateur et le fichier n’est pas téléversé.
  3. Téléchargez le fichier JSON terminé.

TOML et JSON : ce qui change

TOML face à JSON
TOMLJSON
Nom completTom's Obvious Minimal LanguageJavaScript Object Notation
Extension de fichier.toml.json
Type de médiaapplication/tomlapplication/json
Première publication20132001
SpécificationTOML 1.0RFC 8259
LicenceStandard ouvertStandard ouvert
Situation actuelleActuelActuel
S’ouvre dans un navigateurAucun navigateurTous les navigateurs
Envisagé à la placeYAML, INIXML, YAML, NDJSON

Ce qui est perdu

Les commentaires ne suivent pas. TOML permet d’annoter un fichier et JSON n’a aucune syntaxe pour cela : chaque ligne d’explication disparaît, et cela touche précisément les fichiers que l’on commente, c’est-à-dire la configuration qu’un autre devra maintenir.

Ce qui est conservé

Rien n’est écarté. TOML et JSON enregistrent leur contenu sans perte : la conversion change l’emballage, pas la qualité, et elle peut être répétée sans que les dégâts s’accumulent.

Ouvrir le résultat

JSON s’ouvre dans tous les navigateurs actuels. TOML va encore moins loin. Si le fichier part sur une page web ou dans un formulaire, c’est souvent toute la raison de la conversion.

Visual Studio Code lit aussi bien TOML que JSON : vous pouvez comparer le résultat à l’original sans second logiciel.

À quoi sert chaque format

Les deux visent des usages différents : TOML la retouche, JSON l’échange entre programmes et le web. Cela mérite d’être pesé avant, car ce qui justifie l’un est souvent ce qui rend l’autre malcommode.

TOML a ete publié en 2013. La spécification est TOML 1.0, et elle mérite d’être connue si le fichier doit survivre à l’outil qui l’a écrit.

JSON date de 2001, décrit par RFC 8259. Visual Studio Code, jq et Postman le lisent.

De TOML à JSON : questions fréquentes

Mon fichier TOML est-il téléversé quelque part ?

Non. Cette conversion se fait entièrement dans votre navigateur : le fichier ne quitte donc pas votre appareil. Vous pouvez le vérifier vous-même — ouvrez l’onglet réseau des outils de développement et convertissez quelque chose. Vous verrez la page elle-même et les requêtes de statistiques et de publicité qui financent ce service, et pas une seule qui transporte votre fichier.

Convertir TOML en JSON est-il gratuit ?

Oui. Pas de compte, pas de filigrane et pas de quota journalier à dépenser : cela tourne sur votre propre machine, vous pouvez donc revenir autant de fois que vous voulez. Le navigateur traite des fichiers jusqu’à 100 Mo, 100 à la fois.

Y a-t-il une perte de qualité en convertissant TOML en JSON ?

Non. JSON enregistre le même contenu sans rien jeter : le résultat est identique en qualité à l’original.

La conversion de TOML à JSON est-elle sans perte ?

Rien n’est écarté. TOML et JSON enregistrent leur contenu sans perte : la conversion change l’emballage, pas la qualité, et elle peut être répétée sans que les dégâts s’accumulent.

Les commentaires survivent-ils de TOML à JSON ?

Les commentaires ne suivent pas. TOML permet d’annoter un fichier et JSON n’a aucune syntaxe pour cela : chaque ligne d’explication disparaît, et cela touche précisément les fichiers que l’on commente, c’est-à-dire la configuration qu’un autre devra maintenir.

En savoir plus sur ces formats