ToolDeck

XML vers JSON

Convertissez XML en JSON

Essayer un exemple

Entrée XML

Sortie JSON

Fonctionne localement · Sûr pour coller des secrets
Le JSON apparaîtra ici…

Qu'est-ce que la conversion XML vers JSON ?

La conversion XML vers JSON est le processus de transformation de données depuis le langage de balisage extensible (XML) vers la notation objet JavaScript (JSON). Les deux formats représentent des données structurées et hiérarchiques, mais utilisent des syntaxes et des modèles de données différents. XML utilise des balises ouvrantes et fermantes avec des attributs optionnels, tandis que JSON utilise des paires clé-valeur, des tableaux et des types primitifs. Convertir XML en JSON permet de travailler avec des données XML dans des environnements où JSON est le format natif, comme les environnements d'exécution JavaScript, les API REST et les bases de données NoSQL.

La conversion n'est pas toujours univoque. XML possède des constructs sans équivalent direct en JSON : les attributs, le contenu mixte (texte intercalé avec des éléments enfants), les instructions de traitement, les commentaires, les sections CDATA et les déclarations d'espaces de noms. Les différentes bibliothèques de conversion gèrent ces constructs différemment, ce qui explique l'existence de plusieurs conventions. L'approche la plus courante préfixe les noms d'attributs avec @ et place le contenu textuel dans un champ #text lorsque des attributs sont présents sur le même élément.

La conversion XML vers JSON est une étape fréquente lors de la migration de SOAP vers REST, de la consommation d'API d'entreprise héritées, ou du traitement de flux de données gouvernementaux et financiers imposant XML. Plutôt que de réécrire simultanément les producteurs et les consommateurs, les équipes convertissent la charge utile XML à la couche frontière et transmettent le JSON en aval. AWS API Gateway, Apache Camel et MuleSoft prennent tous en charge ce modèle nativement.

XML input
<bookstore>
  <book category="fiction">
    <title lang="en">The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <year>1925</year>
    <price>10.99</price>
  </book>
  <book category="non-fiction">
    <title lang="en">Sapiens</title>
    <author>Yuval Noah Harari</author>
    <year>2011</year>
    <price>14.99</price>
  </book>
</bookstore>
JSON output
{
  "bookstore": {
    "book": [
      {
        "@category": "fiction",
        "title": {
          "@lang": "en",
          "#text": "The Great Gatsby"
        },
        "author": "F. Scott Fitzgerald",
        "year": "1925",
        "price": "10.99"
      },
      {
        "@category": "non-fiction",
        "title": {
          "@lang": "en",
          "#text": "Sapiens"
        },
        "author": "Yuval Noah Harari",
        "year": "2011",
        "price": "14.99"
      }
    ]
  }
}

Pourquoi utiliser un convertisseur XML vers JSON en ligne ?

Écrire un script de conversion ponctuel prend du temps, surtout lorsque le XML contient des attributs, des espaces de noms ou des éléments répétés qui doivent devenir des tableaux JSON. Un convertisseur dans le navigateur vous donne la sortie JSON en quelques secondes pour que vous puissiez inspecter la structure et avancer.

Conversion instantanée
Collez du XML et obtenez immédiatement une sortie JSON. Pas besoin d'installer une bibliothèque, d'écrire un script ou de configurer un outil de build.
🔒
Traitement respectueux de la confidentialité
L'intégralité de la conversion s'exécute dans votre navigateur via JavaScript. Vos données XML ne quittent jamais votre machine et ne sont jamais envoyées à un serveur.
🔀
Gère attributs et tableaux
Les attributs sont mappés à des clés préfixées par @. Les éléments frères répétés sont regroupés automatiquement en tableaux JSON, selon la convention Parker ou BadgerFish.
📋
Sans compte requis
Ouvrez la page, collez votre XML et copiez le résultat JSON. Pas d'inscription, pas de clé API, pas de limites d'utilisation.

Cas d'utilisation de la conversion XML vers JSON

Développement frontend
Convertissez les réponses d'API XML en JSON pour afficher les données dans des composants React, Vue ou Angular sans ajouter de bibliothèque d'analyse XML à votre bundle client.
Ingénierie backend
Transformez des charges utiles SOAP, des flux RSS/Atom ou des réponses XML-RPC en JSON à la couche de passerelle API avant de transmettre les données aux microservices qui attendent une entrée JSON.
DevOps et CI/CD
Convertissez les rapports de tests XML (JUnit, NUnit, xUnit) en JSON pour les ingérer dans des tableaux de bord, des bots Slack ou des pipelines de notification CI personnalisés.
QA et tests
Comparez des instantanés JSON convertis avec la sortie attendue pour vérifier qu'un service produisant du XML n'a pas modifié sa structure de réponse entre les versions.
Ingénierie des données
Convertissez les exports XML provenant de portails gouvernementaux, de flux financiers (FIX, FIXML) ou de systèmes de santé (HL7 CDA) en JSON pour les charger dans BigQuery, Snowflake ou Elasticsearch.
Apprentissage des formats de données
Les étudiants qui étudient l'échange de données peuvent coller des exemples XML dans le convertisseur pour voir exactement comment les éléments, les attributs et l'imbrication se mappent aux clés, objets et tableaux JSON.

Référence de correspondance XML vers JSON

XML et JSON ont des modèles de données différents. Le tableau ci-dessous montre comment chaque construct XML correspond à son équivalent JSON selon la convention la plus courante (@ pour les attributs, #text pour le texte accompagné d'attributs). Certains constructs, comme le contenu mixte et les commentaires, n'ont pas de représentation JSON standard.

Construct XMLExemple XMLÉquivalent JSON
Element<name>text</name>"name": "text"
Nested elements<a><b>1</b></a>"a": { "b": "1" }
Attributes<el attr="v"/>"el": { "@attr": "v" }
Text + attributes<el a="1">text</el>"el": { "@a": "1", "#text": "text" }
Repeated elements<r><i>1</i><i>2</i></r>"r": { "i": ["1", "2"] }
Mixed content<p>A <b>B</b> C</p>Varies by convention
CDATA<![CDATA[raw]]>"#cdata": "raw" or flattened
Namespacesxmlns:prefix="uri"Prefix preserved or stripped
Empty element<el/>"el": null or ""
Comments<!-- note -->Discarded (no JSON equivalent)

Comparaison des conventions XML vers JSON

Il n'existe pas de norme unique régissant la correspondance de XML vers JSON. Trois conventions sont largement utilisées, chacune avec des compromis différents pour la gestion des attributs, la détection des tableaux et la préservation du texte.

BadgerFish
Chaque nœud texte est placé dans une clé $. Les attributs reçoivent des clés préfixées par @. Les espaces de noms sont préservés comme entrées @xmlns. Verbeux mais sans perte : vous pouvez faire un aller-retour vers XML sans perdre de données.
Parker
Supprime entièrement les attributs et convertit les éléments textuels en valeurs brutes. Les éléments répétés deviennent des tableaux. Compact et propre, mais destructif : les attributs et les informations d'espace de noms sont supprimés.
GData (Google Data)
Utilise $t pour le contenu textuel et préserve les attributs comme clés de premier niveau sans préfixe. Un compromis entre la verbosité de BadgerFish et la simplicité de Parker. Utilisé historiquement dans les API Google.

Exemples de code

Voici des exemples fonctionnels pour convertir XML en JSON en JavaScript, Python, Go et en ligne de commande. Chaque exemple gère les éléments imbriqués et les balises frères répétées.

JavaScript (browser)
// Using the DOMParser API to walk XML and build a JSON object
function xmlToJson(xml) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xml, 'application/xml')

  function nodeToObj(node) {
    const obj = {}
    // Handle attributes
    if (node.attributes) {
      for (const attr of node.attributes) {
        obj['@' + attr.name] = attr.value
      }
    }
    // Handle child nodes
    for (const child of node.childNodes) {
      if (child.nodeType === 3) { // text
        const text = child.textContent.trim()
        if (text) obj['#text'] = text
      } else if (child.nodeType === 1) { // element
        const key = child.nodeName
        const val = nodeToObj(child)
        if (obj[key]) {
          if (!Array.isArray(obj[key])) obj[key] = [obj[key]]
          obj[key].push(val)
        } else {
          obj[key] = val
        }
      }
    }
    // Simplify text-only nodes
    const keys = Object.keys(obj)
    if (keys.length === 1 && keys[0] === '#text') return obj['#text']
    return obj
  }

  return nodeToObj(doc.documentElement)
}

const xml = '<user><name>Alice</name><role>admin</role></user>'
console.log(JSON.stringify(xmlToJson(xml), null, 2))
// → { "name": "Alice", "role": "admin" }
Python
import xmltodict
import json

xml = """
<user>
  <name>Alice</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>
"""

# xmltodict converts XML to an OrderedDict
result = xmltodict.parse(xml)
print(json.dumps(result, indent=2))
# → {
# →   "user": {
# →     "name": "Alice",
# →     "roles": { "role": ["admin", "editor"] }
# →   }
# → }

# With the standard library (xml.etree.ElementTree)
import xml.etree.ElementTree as ET

def etree_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"@{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        child_data = etree_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(child_data)
        else:
            d[child.tag] = child_data
    if elem.text and elem.text.strip():
        if d:
            d["#text"] = elem.text.strip()
        else:
            return elem.text.strip()
    return d

root = ET.fromstring(xml)
print(json.dumps(etree_to_dict(root), indent=2))
Go
package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
    "strings"
)

// For simple, known schemas — define a struct
type User struct {
    XMLName xml.Name `xml:"user"`
    Name    string   `xml:"name"`
    Roles   []string `xml:"roles>role"`
}

func main() {
    data := `<user><name>Alice</name><roles><role>admin</role><role>editor</role></roles></user>`
    var user User
    xml.NewDecoder(strings.NewReader(data)).Decode(&user)

    out, _ := json.MarshalIndent(user, "", "  ")
    fmt.Println(string(out))
    // → { "Name": "Alice", "Roles": ["admin", "editor"] }
}
CLI (xmllint + jq / yq)
# Using xq (part of yq, a jq wrapper for XML)
# Install: pip install yq  OR  brew install yq
echo '<user><name>Alice</name></user>' | xq .
# → { "user": { "name": "Alice" } }

# Using xmlstarlet + jq
xmlstarlet sel -t -v '//name' input.xml | jq -R '{ name: . }'

# Node.js one-liner with xml2js
echo '<a><b>1</b></a>' | node -e "
  const {parseString} = require('xml2js');
  let d=''; process.stdin.on('data',c=>d+=c);
  process.stdin.on('end',()=>parseString(d,(e,r)=>console.log(JSON.stringify(r,null,2))))
"

Questions fréquemment posées

La conversion XML vers JSON est-elle sans perte ?
Pas toujours. Les attributs XML, les commentaires, les instructions de traitement et les déclarations d'espaces de noms n'ont pas d'équivalent direct en JSON. La plupart des convertisseurs préservent les attributs grâce à une convention de préfixe @, mais les commentaires et les instructions de traitement sont supprimés. Si vous avez besoin d'un aller-retour entièrement réversible, utilisez une convention sans perte comme BadgerFish.
Comment les attributs XML sont-ils représentés en JSON ?
xmlToJsonContent.a2
Comment le convertisseur gère-t-il les éléments XML répétés ?
Lorsqu'un élément apparaît plusieurs fois sous le même parent, le convertisseur les regroupe dans un tableau JSON. Par exemple, deux éléments frères item deviennent { "item": ["a", "b"] }. Un seul élément item reste une simple valeur de type chaîne, sauf si le mode force-array est activé.
Puis-je convertir JSON en XML ?
Oui, mais le résultat dépend de la convention utilisée lors de la conversion initiale. Si les attributs ont été préservés avec des préfixes @, un convertisseur JSON vers XML peut les reconstruire. Si la conversion initiale utilisait Parker (qui supprime les attributs), ces informations sont perdues. ToolDeck propose également un outil JSON vers XML pour la direction inverse.
Que se passe-t-il avec les espaces de noms XML lors de la conversion ?
La gestion des espaces de noms varie selon la bibliothèque. Certains convertisseurs préservent le préfixe dans le nom de la clé (par ex. "ns:element"), d'autres mappent les déclarations xmlns vers des champs séparés, et certains suppriment entièrement les espaces de noms. Vérifiez la sortie pour votre XML spécifique afin de contrôler le comportement des espaces de noms.
Existe-t-il une norme pour la conversion XML vers JSON ?
Il n'existe pas de norme formelle W3C ou IETF. Les références les plus proches sont la convention BadgerFish, la convention Parker et le mapping OASIS XSLT-to-JSON. En pratique, chaque bibliothèque implémente ses propres règles, c'est pourquoi le même XML peut produire un JSON légèrement différent selon les outils.
Comment gérer les fichiers XML volumineux ?
Les convertisseurs dans le navigateur fonctionnent bien pour des fichiers jusqu'à quelques mégaoctets. Pour les fichiers plus grands (10 Mo et plus), utilisez un analyseur en flux comme iterparse de Python (xml.etree.ElementTree) ou xml-stream pour Node.js. Ces outils traitent le document de façon incrémentielle sans charger l'arbre entier en mémoire.