XML to JSON Converter

Free browser-based XML to JSON converter — no sign-up, no upload required. Maps XML attributes to @keys, nests elements, and turns repeated tags into arrays, entirely client-side.

Mis à jour le

Share:
Privacy first: conversion happens entirely in your browser — nothing is uploaded to a server.

Questions Fréquentes

How is an element that has both an attribute and text content converted, like <price currency="USD">19.99</price>?

The attribute forces the element to become a JSON object rather than a plain string, since a plain string value has nowhere to hang the attribute. The text content moves to a #text key alongside the attribute key: {"price": {"@currency": "USD", "#text": "19.99"}}. If the element had no attributes, the same tag would have simplified to a plain string value instead.

What happens to an empty element like <note/> or <note></note>?

Per the XML 1.0 spec, a self-closing tag and an explicitly-closed empty tag are equivalent — there's no way to distinguish them once parsed, so both convert identically. With no attributes and no text or child content, there's nothing to populate the JSON value with, so this typically comes through as an empty string or null rather than an empty object, since there are no attribute or child keys to place inside one.

Are XML comments and processing instructions kept in the JSON output?

No. JSON's grammar (RFC 8259 / ECMA-404) has no comment syntax and no node type analogous to a processing instruction (<?xml-stylesheet type="text/xsl" href="style.xsl"?>), so both are stripped during conversion. Only element structure, attributes, and character data survive the conversion; anything that isn't data in the XML infoset sense is discarded.

Why might converting XML to JSON and back produce a file with different whitespace or attribute order than the original?

Two separate spec gaps compound here. First, XML often contains whitespace-only text nodes between elements purely for pretty-printing indentation, which can surface as stray #text entries unless explicitly stripped. Second, the JSON grammar (ECMA-404) never mandates that object members preserve insertion order — most parsers do in practice, but it isn't a spec guarantee — so attribute order captured as @keys isn't reliably round-trippable either.

Si je convertis <id>007</id> en JSON, la valeur devient-elle le nombre 7 ou reste-t-elle la chaîne "007" ?

C'est une ambiguïté inhérente, pas un bug propre à tel ou tel outil. XML n'a aucun type numérique ou booléen natif — selon la spécification XML 1.0, le contenu de chaque élément est une donnée de caractères — donc une conversion XML vers JSON doit toujours faire un choix quant au moment où un texte doit devenir un nombre/booléen JSON plutôt que de rester une chaîne. Ce choix est réellement risqué pour des valeurs comme "007" (un code postal ou un code produit, pas le nombre 7) ou "1.50" (un prix, où la conversion en nombre supprime silencieusement le zéro final pour donner 1.5). Le comportement par défaut le plus sûr, et celui que privilégient la plupart des conversions, est de conserver toutes les valeurs d'éléments et d'attributs sous forme de chaînes JSON et de laisser le code consommateur décider quand et comment les convertir — ainsi, aucune information n'est détruite silencieusement.

Pourquoi les développeurs convertissent-ils les réponses d'API XML en JSON plutôt que de parser le XML directement en JavaScript ?

Les navigateurs et Node.js n'ont aucun équivalent natif de JSON.parse pour le XML — il faut utiliser DOMParser (uniquement dans le navigateur) ou une bibliothèque XML (côté Node), puis écrire à la main du code de parcours pour extraire les valeurs de l'arbre DOM via getElementsByTagName ou XPath. JSON.parse, à l'inverse, est un simple appel natif qui fournit directement des objets et des tableaux prêts à être déstructurés. C'est exactement pour cette raison que les API SOAP héritées, les flux RSS/Atom et les fichiers sitemap.xml sont si souvent convertis en JSON en périphérie d'une base de code JavaScript : ce n'est pas que JSON soit plus puissant, c'est que l'outillage JS pour le consommer est déjà prêt à l'emploi.

Qui est apparu en premier, XML ou JSON, et en quoi cette histoire explique-t-elle leurs différences de conception ?

XML précède JSON d'environ une décennie : XML 1.0 est devenu une Recommandation du W3C en février 1998, dérivé du SGML et conçu comme un langage de balisage de documents (d'où les attributs, le contenu mixte et les espaces de noms). JSON a été extrait de la syntaxe des littéraux objets de JavaScript par Douglas Crockford au début des années 2000, formellement spécifié une première fois sous RFC 4627 en 2006, puis re-spécifié sous ECMA-404 (2013) et sa forme actuelle, RFC 8259 (2017). Le minimalisme de JSON — quatre types de données, pas d'attributs, pas de contenu mixte — reflète son origine : un format d'échange destiné à transmettre des structures de données à et depuis un programme en cours d'exécution, et non à baliser des documents.

Est-il vrai que JSON n'est essentiellement que du XML avec une syntaxe plus légère ?

Non — et la convention de préfixe @ que cet outil utilise pour les attributs en est elle-même la preuve. Cette convention (@clé pour les attributs, #text pour le contenu mixte) ne fait pas partie de la spécification JSON ; c'est une convention largement répandue mais informelle, et différents outils de conversion XML vers JSON traitent la même entrée différemment — certains aplatissent les attributs en simples clés, d'autres enveloppent le contenu de l'élément dans une clé $ ou _text, d'autres encore utilisent les conventions BadgerFish ou Parker. JSON n'a aucune notion native d'attribut, donc tout outil de conversion XML vers JSON superpose sa propre convention à de simples objets JSON, et la sortie JSON d'un convertisseur ne correspondra pas nécessairement à celle d'un autre pour la même entrée XML.

Que se passe-t-il si deux éléments issus d'espaces de noms XML différents portent le même nom, comme <a:id> et <b:id> ?

Comme ce convertisseur conserve les préfixes d'espace de noms tels quels dans le nom de la clé plutôt que de les résoudre vers leur URI d'espace de noms complète, "a:id" et "b:id" se convertissent en deux clés JSON distinctes et n'entrent pas en collision — mais uniquement tant que les préfixes eux-mêmes diffèrent. Si deux parties différentes d'un même document utilisent par hasard le même préfixe pour des URI d'espaces de noms différentes (ce qui est légal en XML, puisque les associations de préfixes sont limitées à l'élément où elles sont déclarées), ou si un outil en aval reparse le JSON sans contexte d'espace de noms, cette clé basée sur le préfixe n'identifie plus de façon fiable l'espace de noms auquel appartenait réellement l'élément. Pour les documents où les URI d'espaces de noms comptent plus que les préfixes, il est plus sûr de normaliser les préfixes avant la conversion.

Embed This Tool

Add a free, live version of this widget to your own website or blog post — it runs entirely in your visitors' browsers, with a credit link back to The Toolbox.

Copy & paste this HTML
<iframe src="https://getthetoolbox.com/embed/xml-to-json" title="XML to JSON Converter — The Toolbox" width="100%" height="420" style="max-width:480px;border:1px solid #e2e8f0;border-radius:12px" loading="lazy"></iframe>
<p style="font-size:12px;margin:4px 0 0"><a href="https://getthetoolbox.com/converter-tools/xml-to-json?utm_source=embed&utm_medium=widget" target="_blank" rel="noopener">Free XML to JSON Converter</a> by The Toolbox</p>

À propos du convertisseur XML vers JSON

XML (le langage de balisage extensible du W3C, publié pour la première fois en 1998 et aujourd'hui à sa 5e édition de la spécification 1.0) et JSON (formalisé sous ECMA-404 et RFC 8259) répondent au même besoin — l'échange de données structurées et hiérarchiques — mais avec des modèles de données réellement différents. XML est fondamentalement un format de document : chaque nœud est un élément qui peut porter des attributs, des éléments enfants ordonnés et du texte libre, le tout entremêlé. JSON est un format de données construit à partir de quatre structures — objet, tableau, chaîne/nombre/booléen, et null — sans aucune notion d'attribut ni de texte cohabitant avec des nœuds enfants. Convertir de l'un vers l'autre revient à faire correspondre un modèle à l'autre, et certaines fonctionnalités de XML n'ont tout simplement pas d'équivalent en JSON.

Les attributs. Les attributs XML se trouvent dans la balise ouvrante de l'élément : <person id="1" active="true">. Comme les objets JSON n'ont aucune notion d'attribut, cet outil fait correspondre chaque attribut à une clé de même niveau préfixée par @ :

<person id="1"><name>Ada Lovelace</name></person>
{ "person": { "@id": "1", "name": "Ada Lovelace" } }

Éléments répétés ou uniques. C'est l'ambiguïté classique de la conversion XML vers JSON. Si un élément <skills> contient trois enfants <skill>, ceux-ci deviennent un tableau JSON ("skill": ["Math", "Programming", "History"]). Mais s'il n'en contient qu'un seul, le convertisseur n'a aucun schéma à consulter et ne peut pas savoir si cet élément est intrinsèquement singulier ou s'il ne se trouve simplement qu'une seule fois dans ce document précis — il produit donc une simple chaîne ou un objet plutôt qu'un tableau à un seul élément. Cela signifie que la forme du JSON généré peut varier selon le nombre d'occurrences d'une balise sœur dans un document donné, ce qui pose problème si vous écrivez du code exploitant ce JSON en attendant un type de tableau cohérent.

Le contenu mixte. XML permet au texte et aux éléments de s'entremêler à l'intérieur d'un même parent — <p>Hello <b>world</b>!</p> — chose que les objets JSON ne peuvent pas représenter directement, puisque la valeur d'un objet est soit une simple chaîne, soit une structure imbriquée, mais jamais un mélange ordonné des deux. Cet outil fait correspondre les portions de texte à une clé #text aux côtés des clés d'éléments enfants. C'est une approximation raisonnable, mais elle entraîne une perte d'information : les paires clé/valeur de JSON ne sont pas ordonnées selon le modèle objet, donc la position d'entrelacement du texte par rapport aux éléments enfants (texte avant <b>, ou après) n'est pas entièrement préservée — vous récupérez les morceaux, mais pas leur agencement d'origine.

Ce qui ne se transpose pas proprement. Les espaces de noms XML (xmlns:soap="...") et les instructions de traitement (<?xml-stylesheet ...?>) n'ont pas de représentation JSON native que ce convertisseur modélise. Les balises préfixées par un espace de noms passent telles quelles en clés littérales (par exemple, "soap:Envelope"), mais l'association préfixe-URI en elle-même n'est pas conservée séparément, et les instructions de traitement sont purement et simplement supprimées, puisque JSON n'a pas de type de nœud équivalent. Les déclarations DOCTYPE/DTD de XML et les références d'entités (&amp;, &#160;) sont elles aussi résolues et disparaissent — vous obtenez les données de caractères résolues, pas le balisage d'origine.

Les développeurs recourent le plus souvent à cette conversion pour consommer des API SOAP/XML héritées depuis des front-ends JavaScript, pour migrer des formats de configuration XML vers des outils basés sur JSON, ou pour normaliser des flux XML (RSS, sitemaps, réponses SAML) en vue d'un pipeline nativement JSON. Comme les ambiguïtés attribut-versus-tableau évoquées plus haut signifient que l'aller-retour n'est pas toujours sans perte, considérez cette conversion comme une transformation à sens unique destinée à la consommation des données — et non comme une garantie qu'une reconversion vers XML reproduira l'original au bit près.