Aussi disponible en : English · Español · Português · العربية
Convertir TOML en JSON
Collez du TOML, obtenez du JSON, et voyez précisément quelles valeurs JSON n'a pas su transporter.
Qu'est-ce qu'un convertisseur TOML vers JSON ?
TOML est un format de configuration conçu pour être évident à la lecture : des sections entre crochets, des clés et des valeurs séparées par un signe égal, et aucune indentation significative qu'on puisse rater. C'est ce qu'emploient Cargo pour Rust, le pyproject.toml de Python et quantité d'autres outils. JSON, lui, est ce que les programmes se passent entre eux. Un convertisseur transforme l'un en l'autre, et celui-ci le fait dans votre navigateur.
La conversion n'est pas un simple changement d'étiquettes, et c'est là tout l'intérêt. TOML distingue davantage de sortes de valeurs que JSON n'a de place pour en accueillir : de l'information est donc détruite au passage. La plupart des convertisseurs le font en silence. Celui-ci énumère chaque valeur qu'il a dû aplatir et le chemin où elle se trouvait, pour que vous décidiez si cela compte avant que la sortie ne parte où que ce soit.
L'analyseur est vérifié face à la suite de conformité du projet TOML lui-même : 210 documents valides devant produire un résultat exact, et 499 devant être refusés. Il analyse correctement les 210 et refuse la totalité des 499 qu'il peut réellement voir — les six exceptions sont des documents contenant des octets UTF-8 invalides, que nul analyseur lisant un champ de texte de navigateur ne peut rencontrer.
Comment convertir du TOML en JSON
- Collez votre TOML. Tout ce qui est valide en TOML v1.0.0 : tables, tableaux de tables, tables en ligne, clés pointées, chaînes multilignes. Les boutons d'exemple chargent un cas intéressant de chaque sorte.
- Lisez le JSON. Il apparaît aussitôt, indenté de deux espaces, avec un bouton pour le copier. Si le document ne s'analyse pas, vous obtenez la règle enfreinte ainsi que la ligne et la colonne où cela s'est produit.
- Consultez le panneau des pertes en dessous. Il nomme chaque valeur que JSON n'a pas pu représenter fidèlement, avec son chemin. Sur un fichier de configuration ordinaire, il indique que rien n'a été perdu — ce qui est une mesure et non une formule rassurante.
Ce que JSON ne sait pas transporter
TOML possède quatre types distincts de date et d'heure. Une date-heure avec décalage fixe un instant ; une date-heure locale n'a pas de décalage ; une date locale est un jour sans heure ; une heure locale est une heure sans jour. Les quatre sont des valeurs de plein droit, avec leur propre syntaxe. JSON n'a aucun type de date : les quatre arrivent donc sous forme de chaînes entre guillemets, indiscernables d'une chaîne qui ressemble simplement à une date. Chargez le deuxième exemple ci-dessus et le panneau les nomme toutes les quatre.
TOML sépare aussi les entiers des flottants, ce que JSON ne fait pas. Cela a deux conséquences. Un flottant écrit 1.0 ressort en 1 et ne se distingue plus de l'entier voisin. Et un entier 64 bits — TOML garantit toute la plage signée — ne peut pas survivre : les nombres JavaScript ne sont exacts que jusqu'à neuf millions de milliards environ, si bien que 9223372036854775807 revient en 9223372036854776000. Le troisième exemple montre les deux.
La preuve la plus nette qu'il s'agit d'un vrai problème et non d'une pédanterie, c'est la suite de tests du projet TOML lui-même. Ses sorties attendues ne sont pas du JSON ordinaire : chaque valeur scalaire est enveloppée dans un objet portant son type, réparti sur huit étiquettes. Les auteurs des tests de conformité n'ont pas su non plus exprimer les valeurs de TOML en JSON ; ils ont donc inventé un encodage qui dit ce qu'est chaque valeur. Le panneau des pertes de ce convertisseur est le même aveu, rendu là où vous pouvez en tenir compte.
Pourquoi il n'y a pas ici de bouton JSON vers TOML
Le sens inverse pose un problème sans solution honnête, et il vaut mieux le dire que le masquer derrière une fonctionnalité à moitié faite. TOML n'a pas de null. Il n'existe aucune façon de l'écrire dans toute la grammaire : ni mot-clé, ni valeur vide, rien. Une clé a une valeur ou elle est absente.
Un document JSON contenant un null ne peut donc pas être converti. Les options sont de supprimer la clé, ce qui change silencieusement le sens du document, ou d'écrire quelque chose qui ressemble à null et qui est en réalité la chaîne de quatre lettres, ce qui est pire. Ni l'une ni l'autre n'est une conversion. Un outil qui propose le bouton doit en choisir une, et il ne vous dit généralement pas laquelle.
D'autres difficultés, moindres, existent dans ce sens — JSON admet une clé vide, ainsi que des tableaux de formes hétérogènes que la syntaxe de tables de TOML n'exprime pas proprement — mais null est celle qui n'a aucune réponse. Si vous devez aller dans cette direction, l'honnête est de décider d'abord ce que ces null signifient dans votre configuration, car vous seul le savez.
Autres choses bonnes à savoir
TOML est plus strict qu'il n'en a l'air, et cet analyseur s'y tient. Une clé ne peut pas être définie deux fois, une table ne peut pas être rouverte par un second en-tête, et une table en ligne est close dès qu'elle est écrite — une [section] ultérieure ne peut donc rien lui ajouter. Les dates sont validées plutôt que reportées : 2026-02-30 est une erreur et non le 2 mars. Les entiers n'admettent pas de zéro initial. Chacune de ces règles est testée par la suite de conformité, et chacune est un vrai bogue évité dans un fichier de configuration.
Les commentaires et la mise en forme ne survivent pas. JSON n'a pas de syntaxe de commentaire : tout ce qui suit un # disparaît, avec vos lignes vides, l'ordre de vos clés au sein d'une table et votre choix de guillemets. Cela tient au format de destination et non à une lacune de l'outil, et c'est pourquoi convertir en JSON une configuration entretenue à la main est en général un aller sans retour.
L'analyseur accepte TOML v1.0.0, la version publiée. Le brouillon 1.1.0, inachevé, ajoute des choses qui ne sont pas acceptées ici — les virgules finales dans les tables en ligne, entre autres — et c'est délibéré : un convertisseur qui accepte un brouillon que personne n'a publié lira sans broncher des fichiers que les outils réels refusent.
Pourquoi est-ce gratuit ?
L'analyse et la conversion se font toutes deux dans votre navigateur. Rien de ce que vous collez n'est envoyé, journalisé ni stocké : fermer l'onglet suffit à tout effacer. Cela compte ici, car les fichiers de configuration sont précisément le genre de chose qui transporte un nom d'hôte, un chemin ou une clé que vous préféreriez ne pas confier au serveur d'un inconnu.
Pas de compte, pas d'inscription, aucune limite de taille, et aucun filigrane sur ce que vous copiez.