Convertisseurs de données · 6 minutes de lecture
XML à JSON : les décisions que chaque convertisseur doit
XML et JSON sont tous deux des arbres, donc la conversion entre eux devrait être triviale — pourtant chaque conversion XML en JSON que vous avez vue a produit un résultat différent. En effet, XML transporte des informations. JSON n'a pas de place pour : les attributs, le texte et les éléments mélangés, les espaces de noms et les documents dans lesquels la même balise apparaît une ou mille fois. Un bon convertisseur fait ces choix explicitement au lieu de les cacher.
Mis à jour
L'ambiguïté qu'aucun convertisseur ne peut éviter
Considérons `<items><item>x</item></items>`. `item` doit-il être une chaîne ou une liste d'une chaîne ? XML ne le dit pas, et la différence compte au moment où vous écrivez du code dessus : un consommateur s'attendant à ce qu'un tableau soit toujours interrompu sur une réponse à un seul élément, et un consommateur s'attendant à ce qu'un objet se brise lorsqu'un deuxième élément arrive. Les convertisseurs matures vous permettent de forcer les tableaux pour les éléments de liste connus plutôt que de deviner silencieusement, car la supposition est juste assez souvent pour atteindre la production.
Les attributs nécessitent une convention de dénomination
JSON n'a pas d'attributs, donc un attribut doit devenir soit une clé sœur, soit un objet imbriqué. La convention largement utilisée préfixe les noms d'attribut avec `@` — `<image src="a.png"/>` devient `{"@src": "a.png"}` — tandis que le texte de l'élément va dans une clé réservée telle que `#text` lorsqu'un élément a à la fois des attributs et du contenu. Quelle que soit la convention utilisée par le convertisseur, elle doit être appliquée de manière cohérente, car le XML à moitié converti est pire que le XML non converti.
<rss version="2.0"><channel><title>Feed</title></channel></rss>
→ {
"rss": {
"@version": "2.0",
"channel": { "title": "Feed" }
}
}
Espaces de noms
Les documents avec espace de noms (services SOAP, plans de site, formats Office) qualifient les noms d'éléments comme `ns:element`. JSON n'a pas d'équivalent, donc un convertisseur soit supprime le préfixe, le conserve dans la clé, soit réorganise le document autour de l'URI de l'espace de noms. Le supprimer est courant et parfois désastreux lorsque deux espaces de noms utilisent le même nom local. Si votre document utilise des espaces de noms, vérifiez le résultat pour détecter les collisions avant de lui faire confiance et préférez conserver le préfixe dans la clé.
Où cette conversion est réellement utilisée
- Flux RSS et Atom : la lecture d'un flux en JavaScript est beaucoup plus facile après la conversion.
- SOAP et API existantes : transformer une réponse en quelque chose qu'un client moderne peut consommer.
- Plans de site et fichiers de configuration : inspection de la structure sans éditeur comprenant les schémas.
- Migrations de données : déplacement d'enregistrements d'un système de l'ère XML vers un système basé sur l'ère JSON.
La fidélité aller-retour est un mythe. La conversion de XML en JSON et inversement renvoie rarement le document original octet par octet, car l'ordre de déclaration, les espaces, les commentaires et CDATA ne survivent pas. Convertissez lorsque vous devez consommer les données ailleurs, et non comme stratégie de sauvegarde.
Validez d'abord, puis convertissez
Les analyseurs XML sont stricts concernant les balises non fermées et les entités invalides, et les messages d'erreur sont généralement précis. Corrigez le document avant de le convertir — une entrée bien formée est le seul moyen d'obtenir une structure JSON qui mérite d'être conservée. La conversion s'exécute ensuite localement dans le navigateur, ce qui est important lorsque le XML est une exportation client ou une réponse de service interne, et elle continue de fonctionner hors ligne.
XML à JSON — questions fréquemment posées
Pourquoi XML à JSON produisent-ils des résultats de forme différente dans différents outils ?
XML contient des attributs, des espaces de noms et des éléments répétés que JSON ne peut pas exprimer directement, donc chaque outil choisit des conventions — `@` pour les attributs, `#text` pour le contenu, des tableaux pour les listes connues. Un outillage cohérent compte plus que la convention que vous choisissez.
Comment les éléments XML répétés sont-ils représentés dans JSON ?
Sous forme de tableau, généralement de manière inconditionnelle pour les éléments vus plus d'une fois. Les occurrences uniques peuvent rester des objets à moins que vous ne forciez les tableaux pour cet élément, ce qui constitue le choix le plus sûr pour tout ce qui peut se répéter.
Puis-je convertir une réponse SOAP en JSON ?
Oui, bien qu'il contienne des espaces de noms et une structure d'enveloppe dont la plupart des codes grand public ne veulent pas. Convertissez, puis façonnez le résultat en fonction de la charge utile dont vous avez réellement besoin plutôt que de transmettre l'enveloppe via votre application.
Outils mentionnés dans cet article
Plus d'articles à lire
6 minutes de lecture
YAML à JSON : convertir des configs sans perdre la tête
Convertissez YAML en JSON dans le navigateur avec la prise en charge de plusieurs documents et les emplacements exacts des erreurs, ainsi que les erreurs YAML qui interrompent discrètement les pipelines CI.
6 minutes de lecture
Formateur JSON : joli, minifié et réellement valide
Un formateur JSON qui imprime, réduit et valide avec précision les emplacements d'erreur, ainsi que les cinq erreurs de syntaxe derrière presque toutes les erreurs JSON invalides.
5 minutes de lecture
CSV à JSON : d’un tableur aux données structurées
Convertissez CSV en JSON dans le navigateur : explication des lignes d'en-tête, des délimiteurs, des règles de citation et de la gestion des types, avec les exportations de feuilles de calcul qui cassent les analyseurs.