Convertisseur XML en JSON
Qu'est-ce que la conversion XML en JSON ?
XML to JSON convertit un balisage XML en structure JSON afin de manipuler les données plus facilement dans JavaScript, des API, outils no-code ou pipelines modernes. Le mapping n’est pas toujours évident, car XML possède éléments, attributs, nœuds texte, espaces de noms, ordre et nœuds répétés, tandis que JSON utilise objets, tableaux et valeurs simples. L’outil sert aux intégrations legacy, réponses SOAP, sitemaps, flux RSS, configurations et données de test. En production, il faut examiner gestion des attributs, éléments vides, contenu mixte, namespaces et détection des tableaux. Un JSON parsé correctement ne garantit pas que toute l’information métier est préservée comme prévu.
Comment utiliser
Comment utiliser
- Collez ou saisissez des données XML dans la zone de saisie de gauche
- Sélectionnez la taille d'indentation (2 espaces, 4 espaces ou Tab)
- Le JSON converti s'affiche à droite avec coloration syntaxique
- Vérifiez le résultat de la conversion et corrigez les éventuelles erreurs XML
- Cliquez sur Copier ou sur Télécharger pour enregistrer le résultat
Notes sur la structure des données
- Les attributs XML, nœuds répétés, espaces de noms et texte mixte peuvent se mapper en JSON de plusieurs façons valides ; inspectez la structure générée avant de l'utiliser.
- Pour la migration d'API, définissez une règle de correspondance des champs plutôt que de vous fier à une seule conversion d'exemple.
Cas d’utilisation
Principe technique
La conversion commence par l'analyseur XML intégré au navigateur. `new DOMParser().parseFromString(xmlString, 'application/xml')` renvoie un `Document` conforme au W3C DOM Level 3 Core, qui valide la conformité syntaxique par rapport à XML 1.0 (Cinquième édition) et expose le résultat sous forme d'un arbre de nœuds `Element`, `Attr`, `Text`, `CDATASection` et `Comment`. Si l'entrée est mal formée, l'analyseur ne lance pas d'exception — il renvoie un document dont l'élément racine est `<parsererror>` contenant l'emplacement et la raison, de sorte que le convertisseur vérifie d'abord `doc.querySelector('parsererror')` et affiche ce message au lieu de produire un JSON partiel. Le mapping arbre-vers-JSON parcourt le document en profondeur selon une convention de type Badgerfish. Chaque élément devient une propriété dont la clé est le nom local ; les éléments enfants deviennent des objets imbriqués ; les attributs d'élément sont aplanis avec un préfixe `@` (ex. `<user id="7">` → `{ "user": { "@id": "7" } }`) ; le contenu textuel adjacent aux éléments enfants est stocké sous `#text`. Les éléments frères répétés portant le même nom se replient en tableau JSON : deux nœuds `<item>` deviennent `"item": [ ... ]`, mais un seul `<item>` reste un objet simple — c'est l'ambiguïté bien connue « unique versus multiple », car XML ne peut pas distinguer une liste à un élément d'une valeur scalaire tandis que JSON traite `"item": {...}` et `"item": [{...}]` comme des formes différentes. Plusieurs fonctionnalités XML n'ont pas d'équivalent JSON propre et sont volontairement avec perte. L'ordre des éléments est préservé par XML mais non garanti par l'ordre des clés d'objet JSON chez tous les consommateurs (bien qu'ES2015 spécifie l'ordre d'insertion pour les clés de type chaîne, les schémas comme JSON Schema ne le contraignent pas). Le contenu mixte comme `<p>Hello <b>world</b>!</p>` entrelace du texte avec des éléments et ne peut pas faire un aller-retour dans le modèle simple clé-valeur. Les espaces de noms XML en notation Clark (`{http://example.com/ns}user`) se réduisent au nom local `user`, ce qui peut entrer en collision avec un élément sans rapport portant le même nom. Les blocs CDATA comme `<![CDATA[<raw>]]>` sont déballés en texte brut. Les instructions de traitement (`<?xml-stylesheet ...?>`), les commentaires (`<!-- ... -->`) et la déclaration XML sont supprimés car JSON n'a pas de syntaxe pour eux. L'indentation est appliquée via `JSON.stringify(value, null, indent)` avec 2 espaces, 4 espaces ou `'\t'`.
- Analyseur : `new DOMParser().parseFromString(xml, 'application/xml')` selon W3C DOM Level 3 Core ; les erreurs apparaissent sous forme d'un élément racine `<parsererror>`, pas d'une exception levée.
- Conventions de mapping : `@attr` de style Badgerfish pour les attributs, `#text` pour le texte mixte, nom local de l'élément pour les enfants ; Parker supprime les attributs, Spark les conserve dans `$`.
- Les enfants répétés portant le même nom se replient en tableau JSON ; un enfant unique reste un objet — l'ambiguïté classique « unique versus multiple » n'a pas de côté solution XML.
- Fonctionnalités avec perte : attributs (sans préfixe `@`), espaces de noms (`xmlns:foo`), instructions de traitement, commentaires, déclaration XML et enveloppes CDATA.
- Le contenu mixte (`<p>Hello <b>world</b>!</p>`) ne peut pas faire un aller-retour dans un JSON clé-valeur ; l'ordre des éléments peut être perdu chez les consommateurs qui ne préservent pas l'ordre des clés.
- La conversion nombre/booléen est un choix délibéré : `<age>30</age>` peut devenir `30` (nombre) ou `"30"` (chaîne) ; les zéros en tête (`007`) doivent rester des chaînes.
- Le formatage de sortie utilise `JSON.stringify(value, null, indent)` avec une indentation de 2 espaces, 4 espaces ou `'\t'` ; le résultat est en UTF-8 sans BOM.
Exemples
Élément simple
<root>
<name>John</name>
</root>
→
{"root": {"name": "John"}}Éléments répétés
<root>
<item>A</item>
<item>B</item>
</root>
→
{"root": {"item": ["A", "B"]}}Structure imbriquée
<root>
<user>
<name>John</name>
<age>30</age>
</user>
</root>
→
{"root": {"user": {"name": "John", "age": 30}}}FAQ
Comment les éléments XML sont-ils mappés en JSON ?
Chaque élément devient une propriété JSON dont la valeur est le contenu de l'élément (chaîne ou objet imbriqué). Les éléments répétés portant le même nom deviennent des tableaux. Les attributs sont généralement préfixés par '@' ou stockés sous une clé spéciale comme '$'. La convention exacte varie et est configurable sur la plupart des pages.
Pourquoi la conversion XML vers JSON est-elle parfois lossy ?
XML distingue les éléments, les attributs, le contenu textuel, le contenu mixte (texte et éléments), les espaces de noms, les instructions de traitement et les commentaires. JSON ne possède que des objets, des tableaux, des chaînes, des nombres, des booléens et null. Mapper l'arbre XML plus riche vers JSON fait perdre des informations sur l'ordre et la distinction élément/attribut.
Comment les éléments à contenu mixte (texte + enfants) sont-ils gérés ?
Hello world!
n'a pas de représentation JSON propre. La page utilise généralement une clé spéciale (par exemple '#text' ou '$') pour capturer le texte libre, mais l'ordre entre texte et éléments n'est pas toujours préservé. Évitez le contenu mixte si vous prévoyez un aller-retour.Et les espaces de noms XML ?
Les éléments préfixés (<ns:foo>) deviennent des clés de chaîne 'ns:foo' ou sont scindés en propriétés ns/local-name. Les déclarations xmlns peuvent être préservées comme des propriétés de type attribut ou supprimées, selon la configuration de la page.
Puis-je revenir du JSON à un XML identique ?
L'aller-retour n'est pas sans perte en général, en particulier pour le contenu mixte, les commentaires, les instructions de traitement et l'ordre des attributs. Pour du XML purement données (configuration, enregistrements simples), l'aller-retour fonctionne généralement. Pour du XML de type document (DocBook, HTML, RSS), utilisez un véritable analyseur XML.
Un élément XML vide <foo/> est-il identique à <foo></foo> ?
Oui pour l'analyseur. Les deux produisent une propriété foo avec une chaîne vide ou la valeur null. La syntaxe auto-fermante n'est qu'une question de présentation en XML.
La conversion est-elle locale ?
Oui. L'analyse XML et la génération JSON ont lieu dans votre navigateur. La page ne téléverse pas vos données.