Convertir un XML en JSON

Un flux XML devient un JSON lisible, selon des conventions annoncées.

Traité sur cet appareil · aucun envoi de fichier

XMLRSSATOMKMLGPXXSD+2Vous pouvez aussi coller (Ctrl+V)Confortable jusqu’à 50 Mo

80 ko à télécharger la première fois, puis conservé sur cet appareil.détails

Moteur : fast-xml-parser.

À quoi sert cette page

Un export d’ERP, un flux RSS, une réponse de service web : le XML est encore partout, et presque tout ce qui le consomme aujourd’hui attend du JSON. La conversion n’est pourtant pas mécanique — un attribut, un élément répété une seule fois, du texte mêlé à des balises n’ont pas d’équivalent évident. Cette page applique des conventions écrites noir sur blanc plutôt que des choix invisibles, et fait le travail dans votre navigateur : un catalogue de prix ou un export client ne part sur aucun serveur.

On dit aussi : convertir xml en json, xml vers json.

Comment faire

  1. Déposez un ou plusieurs fichiers XML.
  2. Choisissez le sort des attributs et des éléments répétés.
  3. Lancez la conversion et téléchargez le fichier .json.

Questions fréquentes

Pourquoi certaines clés commencent-elles par « @ » ?

Parce qu’elles viennent d’attributs XML, et non d’éléments. Le JSON ne fait pas cette distinction : sans préfixe, un attribut « ref » et un élément « ref » du même parent se marcheraient dessus. Vous pouvez aussi demander à ignorer purement et simplement les attributs.

Pourquoi ai-je parfois un objet et parfois un tableau pour la même balise ?

Parce qu’en mode automatique la forme suit le fichier : un article donne un objet, deux articles donnent un tableau. C’est pratique à relire, mais gênant pour un script, qui doit alors gérer les deux cas. L’option « toujours des tableaux » rend le schéma stable, au prix d’un JSON un peu plus verbeux.

Mes accents sortent-ils correctement ?

Oui, y compris quand le fichier les écrit sous forme d’entités numériques : « Rhône » redevient « Rhône ». Les entités nommées propres au HTML (é,  ), qui ne font pas partie du XML, sont en revanche laissées telles quelles — les déclarer serait le rôle de la DTD du document.

Que se passe-t-il si mon fichier XML est incomplet ?

Il est refusé, avec la ligne et la colonne du problème. C’est délibéré : la plupart des convertisseurs acceptent un fichier tronqué et rendent un JSON partiel qui a l’air correct. Mieux vaut une erreur immédiate qu’un fichier faux téléchargé sans le savoir.

Les valeurs numériques sont-elles converties ?

Oui par défaut, sauf celles que la conversion abîmerait : une référence « 007 » resterait fausse en devenant 7, et un téléphone « +33612345678 » perdrait son plus. Ces formes restent du texte, et vous pouvez de toute façon désactiver la conversion pour tout garder en chaînes de caractères.

Bon à savoir

  • Un attribut devient une clé préfixée « @ » (@ref), le texte d’un élément qui porte aussi des attributs va dans une clé « #texte ». Ce sont des conventions : le JSON n’a pas de place réservée pour les attributs.
  • Un élément répété devient un tableau, un élément unique reste un objet. Un fichier où la répétition varie donnera donc un JSON de forme variable : l’option « toujours des tableaux » supprime ce piège.
  • Le texte mixte — du texte et des balises au même niveau, comme « Tarifs <em>hors taxes</em> au 5 janvier » — n’est pas fidèlement représentable : les morceaux de texte sont regroupés et leur position par rapport aux balises est perdue.
  • Les commentaires, la déclaration <?xml ?> et le DOCTYPE sont écartés : ce ne sont pas des données. Les préfixes d’espace de noms, eux, sont conservés tels quels (« ns:balise » reste « ns:balise »).
  • Aucune entité externe n’est résolue et aucune DTD n’est téléchargée : un fichier qui référence une définition distante ne déclenche aucune requête réseau, ici pas plus qu’ailleurs.
  • Le fichier est chargé entier en mémoire : au-delà de quelques dizaines de mégaoctets, comptez quelques secondes et un onglet gourmand.
  • Un XML mal formé est refusé avec la ligne et la colonne fautives. Il n’est pas réparé : deviner où refermer une balise reviendrait à inventer votre contenu.

Outils liés