Aller au contenu

Conversion JSON ⇄ XML

JSON ⇄ XML

Convertit entre JSON et XML, avec un traitement réglable des attributs, des tableaux et des nœuds texte.

Convertit du XML en JSON et inversement. Il n'existe pas de correspondance canonique entre les deux — XML a des attributs, du contenu mixte ordonné et des espaces de noms, JSON n'a rien de tout cela —, alors cette page rend ses choix explicites et vous laisse les changer au lieu de cacher une convention.

🔒 Fonctionne entièrement dans votre navigateurjsonxmlconvert
Sens

Un attribut devient `@id`.

Là où va le texte propre d’un élément.

XML

JSON

Il n’existe pas de correspondance canonique entre XML et JSON, alors les choix faits ici sont écrits noir sur blanc : un attribut devient une clé comme @name et le texte propre d’un élément se retrouve dans #text, tandis que des frères de même nom deviennent un tableau. C’est ce dernier point qui peut faire perdre de l’information à l’aller-retour : une liste qui n’a qu’un seul élément revient sous la forme d’un objet unique, sauf si « toujours des tableaux » est activé.

Entrée

215 caractères

Sortie

399 caractères

Comment s’en servir

  1. Choisissez le sens

    Les deux côtés gardent des entrées séparées : passer de l'un à l'autre ne perd donc pas ce que vous aviez collé.

  2. Réglez le préfixe d'attribut et la clé de texte

    `@` et `#text` sont la convention répandue (fast-xml-parser, xml2js et d'autres les emploient), mais si le JSON que vous devez produire en utilise d'autres, changez-les ici plutôt qu'en post-traitement.

  3. Activez toujours-des-tableaux si le JSON part vers du code

    C'est la partie avec perte de la correspondance : un `<item>` seul devient un objet, deux deviennent un tableau, et le code qui les consomme doit gérer les deux cas. Forcer les tableaux rend la forme stable, au prix d'un peu de verbosité.

Questions fréquentes

L'aller-retour me rend-il mon XML ?

Structurellement, en général oui ; octet pour octet, non. Les commentaires, les instructions de traitement et la distinction entre `<a/>` et `<a></a>` ne survivent pas, et le contenu mixte — texte et éléments entrelacés — ne peut pas être représenté en JSON d'une façon qui en préserve l'ordre.

Pourquoi `12` est-il une chaîne ?

Parce que XML n'a pas de types — toute valeur d'un document est du texte, et seul un schéma dit le contraire. L'interrupteur de conversion devinera les nombres et les booléens, mais c'est une supposition : un code produit `0123` devient 123, et une chaîne de version `1.10` devient 1.1.

Que deviennent les espaces de noms ?

Les préfixes sont gardés comme partie du nom de l'élément — `soap:Body` devient la clé `soap:Body` — et les déclarations `xmlns` passent comme des attributs ordinaires. Rien n'est résolu vers un URI d'espace de noms : deux documents qui emploient des préfixes différents pour le même espace de noms produisent donc du JSON différent.

Puis-je lui donner une réponse SOAP ?

Oui, et c'est l'une des raisons courantes de venir ici. L'enveloppe, le corps et la charge utile passent tous en objets imbriqués ; les clés `@` sont là où atterrissent les attributs SOAP.

À alimenter depuis

Ensuite

Ces outils acceptent ce que celui-ci produit : le résultat peut y aller directement.