Outils de développement · Convertisseurs de syntaxe
Comparaison de quatre modèles de données : pourquoi JSON, YAML, TOML et XML ne mappent jamais 1 :1
· Contexte
formats de données json yaml
Chaque conversion entre ces formats entraîne une perte quelque part, car chacun a été conçu autour d'un modèle de données différent. Cet article compare leurs systèmes et structures de types afin que vous puissiez prédire ce qu'une conversion conservera et ce qu'elle supprimera.
La configuration qui ne ferait pas d'aller-retour — un fichier converti en trois formats et les champs qui revenaient différents
Un objet ordinaire contenant des nombres sûrs, des chaînes, des booléens, des tableaux et des objets imbriqués peut survivre aux tests JSON-à-YAML-à-JSON et JSON-à-TOML-à-JSON. Ajoutez un null avant TOML, une date/heure de TOML, un contenu mixte XML ou un commentaire YAML et certaines modifications de valeur ou d'informations sur la source.
La question utile n'est pas de savoir si la conversion entraîne universellement des pertes. Il s'agit de quelle classe d'entrée et quelle direction préservent les propriétés dont vous avez besoin. Les avertissements et les refus de ToolAcre rendent cette matrice observable plutôt que de réduire chaque paire à une seule promesse marketing.
Une configuration représentative peut effectuer un aller-retour entre certaines paires, mais pas toutes les formes prises en charge.
JSON fournit des valeurs nulles, booléennes, des nombres, des chaînes, des tableaux et des objets dans cet analyseur. Il n'a pas de commentaires, de type datetime ou de syntaxe de référence partagée. JavaScript analyse les nombres lorsque IEEE-754 double, de sorte qu'un entier déjà non cité au-delà de la plage de sécurité peut perdre en précision avant qu'un autre rédacteur ne le voie.
Les clés d'objet sont des chaînes et le tri facultatif modifie leur présentation. Les tableaux restent ordonnés. Une analyse stricte rejette les commentaires, les virgules finales et les jetons numériques non finis, établissant ainsi une base de référence compacte pour les autres lecteurs. Modèle de valeur de
JSON tel qu'utilisé par cette implémentation JavaScript
ToolAcre accepte YAML via des schémas restreints JSON ou Core. Les ancres et les alias sont résolus, les commentaires disparaissent, les flux deviennent des tableaux, les clés en double conservent la dernière valeur avec un avertissement et les alias récursifs ou explosifs sont refusés.
Les balises personnalisées, les constructeurs binaires, d'horodatage, d'ensemble et d'objet langage sont rejetés. Core Infinity et NaN deviennent nuls dans les formats cibles avec des avertissements. Il s'agit intentionnellement d'un sous-ensemble du système de balises plus large de YAML, et non d'une revendication de prise en charge complète des objets YAML.
Le modèle restreint YAML ToolAcre accepte
TOML commence par un tableau et prend en charge les chaînes, les entiers signés, les flottants, les booléens, les tableaux, les tableaux et quatre types temporels. Il n'a pas de valeur nulle. ToolAcre convertit les dates et les heures en chaînes orientées source et les entiers larges en chaînes décimales plutôt que de perdre des chiffres.
Lors de l'écriture de TOML, les clés d'objet nulles sont omises et les entrées de tableau nulles deviennent des chaînes vides. Les tableaux racines et les scalaires sont refusés. Les commentaires et le choix de l’auteur parmi les en-têtes, les touches pointillées et les tableaux en ligne ne renvoient pas par une valeur simple.
Table racine de TOML, valeurs temporelles et limite nulle
XML est projeté sous forme d'arborescence avec les attributs `@`, des clés enfants ordinaires, `#text`, `#cdata`, des tableaux frères et sœurs répétés et des préfixes d'espace de noms littéraux. Les commentaires, déclarations et instructions de traitement sont supprimés. La position du texte mixte est perdue et un contre plusieurs ne peut pas être connu avant que les répétitions n'apparaissent.
Valeurs lues sous forme de chaînes, sauf si l'inférence est sélectionnée. Null écrit à partir de JSON devient un élément vide et ne peut pas être distingué d'une chaîne vide au retour. Chaque DOCTYPE est refusé et les noms invalides arrêtent la sérialisation au lieu d'être réécrits.
Projection XML de ToolAcre : éléments, attributs, texte et préfixes littéraux
Neuf directions d'expédition : JSON vers YAML, XML, TOML et CSV ; YAML à JSON et TOML ; TOML à JSON et YAML ; XML à JSON. Les valeurs ordinaires en forme de JSON s'en sortent mieux entre JSON et YAML. TOML introduit la date et les limites nulles. XML nécessite des conventions de dénomination et de catégorie de nœud.
CSV est une valeur aberrante plate et une sortie uniquement. Les tableaux ou les objets sélectionnés deviennent des lignes, les chemins imbriqués s'aplatissent en colonnes en pointillés, les fusions nulles avec du texte vide et les chaînes de type formule sont neutralisées. CSV-to-JSON, XML-to-TOML et les autres paires absentes sont refusées plutôt que déduites.
Matrice de compatibilité pour les neuf directions expédiées, avec CSV uniquement en sortie
Les formats binaires et les langages de schéma sont hors de portée. Un schéma peut restaurer la cardinalité d'une liste ou valider des formes métier, tandis que les codages binaires introduisent des types et un cadrage au niveau octet non représentés ici. Le convertisseur ne revendique jamais ces capacités.
La conversion syntaxique ne prouve pas non plus la validité de l'application. Un message de commande YAML, XML ou un fichier de projet TOML propre en forme de Kubernetes peut toujours violer le contrat cible. Utilisez le validateur de domaine après avoir inspecté le mappage syntaxique.
À retenir : choisissez le modèle, puis la syntaxe - et comment le panneau des convertisseurs de syntaxe vous permet de tester une conversion avant de vous y engager
Choisissez le modèle de données avant de choisir sa ponctuation. Si les commentaires et les alias sont importants, un saut JSON ne peut pas les conserver. Si null est important, la sortie TOML le modifie. Si le contenu mixte ordonné est important, une simple projection JSON est insuffisante. Si la destination est une table, JSON imbriqué nécessite une convention d'aplatissement explicite.
Utilisez ToolAcre pour tester un document représentatif et lire chaque avertissement. Le résultat est une preuve d'une paire et d'une entrée concrètes, et non l'autorisation d'appeler toutes les conversions sans perte ou chaque analyseur pris en charge complet.
Créez le document représentatif à partir des limites qui comptent pour votre service : un texte nul et vide, un grand identifiant, une chaîne de type date, un enregistrement répété, un commentaire ou un alias si YAML est impliqué, et un texte mixte si XML est impliqué. Comparez les valeurs normalisées après chaque saut pris en charge et conservez les avertissements avec le résultat. Cette matrice devient un artefact de décision pour le modèle choisi plutôt qu’une vague préférence pour une syntaxe familière.