Convertir JSON en XML est l’inverse d’un mapping à perte, ce qui signifie que vous devez faire des choix que JSON ne vous a jamais forcé à faire : quel est l’élément racine ? Cette clé devient-elle un attribut ou un élément enfant ? Comment un tableau JSON devient-il des balises XML répétées ? Ce guide couvre les conventions pour JSON vers XML —— éléments racines, tableaux, attributs et échappement —— en JavaScript, en Python et dans le navigateur.
Choisir un élément racine
XML exige exactement un élément racine ; JSON n’a pas cette règle. Le premier choix est donc ce qui enveloppe tout. Si votre JSON est un objet avec une seule clé de premier niveau, cette clé est la racine naturelle :
{ "note": { "to": "Ada", "from": "Bob" } }
<note>
<to>Ada</to>
<from>Bob</from>
</note>Si le JSON a plusieurs clés de premier niveau (ou est un tableau), il n’y a pas de racine unique, donc les convertisseurs enveloppent tout dans un élément synthétique comme <root> :
{ "to": "Ada", "from": "Bob" }
<root>
<to>Ada</to>
<from>Bob</from>
</root>Attributs à partir des clés préfixées @
Pour faire l’aller-retour avec la convention XML-vers-JSON, les clés commençant par @ sont émises comme attributs et non comme éléments enfants, et une clé #text devient le contenu textuel de l’élément :
{
"price": { "@currency": "USD", "#text": "9.99" }
}
<price currency="USD">9.99</price>Si vous n’utilisez pas cette convention, chaque valeur devient un élément enfant —— valide, juste plus verbeux. La convention @/#text est ce qui rend XML → JSON → XML sans perte.
Les tableaux deviennent des éléments répétés
Un tableau JSON ne devient pas un seul élément avec plusieurs valeurs —— il devient le même élément répété, parce que c’est ainsi que XML représente une liste :
{ "tags": { "tag": ["a", "b", "c"] } }
<tags>
<tag>a</tag>
<tag>b</tag>
<tag>c</tag>
</tags>Conséquence subtile : un tableau d’objets au sommet ne peut pas être la racine (cela produirait plusieurs racines), il faut donc l’envelopper —— typiquement dans un <root> contenant des <item> répétés.
Valeurs sans mapping propre
- Booléens et nombres —— XML n’a pas de types, donc
trueet42sont écrits comme le textetrueet42. - null —— habituellement un élément vide/auto-fermant :
<middleName/>. - Clés non valides comme noms d’éléments —— les noms ne peuvent pas commencer par un chiffre ni contenir d’espaces.
"1st place"n’est pas une balise légale et doit être nettoyée, sinon le XML produit est invalide.
Échappement et déclaration
Les valeurs textuelles et d’attributs doivent échapper &, < et > (et " dans les attributs). Un convertisseur devrait aussi préfixer la déclaration XML pour que la sortie soit un document complet :
<?xml version="1.0" encoding="UTF-8"?>
<message>B & C are < D</message>Cibler un XSD ou produire xmlns
Si votre consommateur valide le XML contre un XSD (XML Schema), la conversion doit faire quelques choses en plus du mapping clé→élément :
- L’ordre des éléments compte. Les attributs XML d’un élément sont sans ordre (selon la spec), mais les éléments enfants sont ordonnés, et la plupart des XSD imposent cet ordre via
xsd:sequence. Émettez les enfants dans l’ordre attendu par le schéma, pas dans l’ordre d’itération des clés de l’objet, sinon la validation échouera. - Mapping des namespaces. Recréez les déclarations
xmlnscomme attributs@xmlnssur la racine, et réinjectez les noms préfixés dans le XML ("soap:Envelope"⇒<soap:Envelope>). Un convertisseur qui supprime les namespaces produira un XML qui ne validera aucun XSD qui les requiert. - Valeurs conscientes des types. XML n’a pas de types natifs, donc un XSD avec
xsd:intouxsd:datevérifie simplement que le contenu texte correspond. Formatez la valeur JSON comme le texte attendu par le motif XSD (date ISO, entier en chaîne, etc.).
Convertir JSON en XML en code
// JavaScript —— un petit builder récursif, ou une librairie :
import { XMLBuilder } from 'fast-xml-parser';
const builder = new XMLBuilder({ ignoreAttributes: false, attributeNamePrefix: '@' });
const xml = builder.build(jsonObject);
# Python —— dicttoxml, ou à la main avec xml.etree.ElementTree
from dicttoxml import dicttoxml
xml_bytes = dicttoxml({"note": {"to": "Ada"}}, attr_type=False)Convertir JSON en XML en ligne
Collez votre JSON dans le convertisseur JSON ⇄ XML et cliquez sur To XML. Il choisit une racine raisonnable, mappe les clés @ sur des attributs, répète les éléments pour les tableaux et échappe les caractères spéciaux —— le tout dans votre navigateur. Si votre JSON contient des erreurs de syntaxe, il est d’abord réparé ; vous pouvez aussi le nettoyer avec JSON Fix.
Questions fréquentes
Comment convertir JSON en XML ?
Choisissez un élément racine (une seule clé de premier niveau ou un <root> synthétique), puis transformez récursivement les clés en éléments enfants, les clés préfixées @ en attributs, et les tableaux en éléments répétés —— en échappant &, < et > dans le texte.
Comment un tableau JSON devient-il XML ?
Chaque élément du tableau devient un élément distinct portant le même nom de balise, parce que XML représente les listes par répétition d’éléments plutôt qu’un seul nœud multi-valeur.
Comment faire d’une valeur JSON un attribut XML ?
Préfixez la clé avec @ (par ex. "@id") et placez le texte de l’élément sous #text. Cela correspond à la convention standard XML-vers-JSON, donc la conversion est réversible.
Que se passe-t-il si une clé JSON n’est pas un nom d’élément XML valide ?
Les noms de balises XML ne peuvent pas commencer par un chiffre ni contenir d’espaces, donc des clés comme "1st place" doivent être nettoyées (p. ex. en _1st_place) sinon la sortie n’est pas du XML bien formé.
Outils et guides liés
- Convertisseur JSON ⇄ XML —— convertit dans les deux sens dans votre navigateur
- Conversion XML vers JSON : attributs, nœuds texte, tableaux et namespaces —— le sens inverse
- Comment convertir CSV et XML en JSON
- Qu’est-ce que JSON ? —— les types et règles du format source