XML ⇄ JSON
Collez l’un des deux formats — l’autre apparaît au fil de la frappe, dans les deux sens.
Comment l’utiliser
- Collez du XML ou du JSON dans le champ — le résultat se dessine au fil de la frappe, sans bouton à presser. Le sens est déduit du premier caractère (< pour XML, [ ou { pour JSON) et affiché au-dessus du résultat, pour que vous puissiez le vérifier.
- Si le sens a été mal deviné, choisissez XML → JSON ou JSON → XML. Les options ci-dessous changent avec le sens : XML → JSON affiche « Détecter les nombres et les booléens », et JSON → XML affiche le « Nom racine » pour envelopper les tableaux.
- Copiez ou téléchargez le résultat. Les deux utilisent exactement le texte affiché à l’écran ; le fichier s’appelle data.json ou data.xml. « Charger l’exemple » remplit un exemple pour le sens actif.
Exemple
Entrée (XML)
<note id="1"><destinataire>Alice</destinataire><expediteur>Bruno</expediteur><corps>Salut !</corps></note>
Sortie (JSON)
{ "note": { "@id": "1", "destinataire": "Alice", "expediteur": "Bruno", "corps": "Salut !" } }
L’attribut id devient « @id », chaque élément enfant devient une clé, et le texte dans <corps> devient une valeur chaîne. Désactivez « Détecter les nombres et les booléens » pour garder chaque valeur — y compris l’id — sous forme de texte.
Règles, limites et problèmes connus
- Pas d’envoi de fichier, de glisser-déposer ni de récupération par URL : collez le texte. Une zone de dépôt mangerait la hauteur nécessaire au résultat, et lire correctement des fichiers implique de gérer les encodages non UTF-8 — ouvrez le fichier dans le formateur XML (GB18030, Big5, Windows-1256) et copiez le texte.
- L’entrée est plafonnée à 1 000 000 de caractères ; au-delà de 200 000, le résultat attend que vous cessiez de taper et le signale. Au-delà du plafond absolu, une erreur explicite s’affiche — l’entrée n’est jamais tronquée en silence.
- La correspondance est fixe à dessein : un élément devient un objet ; un attribut devient « @nom » ; le texte de l’élément devient « #text » ; un élément enfant devient une clé ; et plusieurs enfants du même nom deviennent un tableau. Un élément feuille contenant seulement du texte devient une chaîne simple, pour qu’un document profondément imbriqué reste lisible.
- La détection de type (XML → JSON) reste prudente : seuls true / false / null (en minuscules uniquement) et les nombres JSON stricts deviennent de vrais types. Un entier avec zéro initial (00501) et un nombre de 16 chiffres ou plus restent des chaînes ; tout le reste reste du texte quand l’option est désactivée. Les attributs restent toujours du texte, jamais retypés, car les attributs XML sont textuels.
- JSON → XML exige une racine unique : un objet de niveau supérieur utilise donc sa clé unique comme élément racine. Un tableau JSON de niveau supérieur n’a pas de racine unique et est enveloppé dans l’élément « Nom racine », chaque élément devenant un enfant répété (nommé « item » par défaut).
- Une valeur JSON sous une clé peut être un objet, un tableau, une chaîne, un nombre, true / false ou null. Les clés « @nom » deviennent des attributs (null / undefined sont ignorés) ; « #text » devient le texte de l’élément ; toute autre clé devient un élément enfant. Les tableaux produisent des éléments répétés.
- Les commentaires XML, les instructions de traitement (<? … ?>) et le DOCTYPE sont ignorés et comptés (ils ne peuvent pas être représentés en JSON) ; le CDATA est conservé comme texte. Le contenu mixte — du texte à côté d’éléments enfants — est aplati dans « #text » et son ordre d’origine n’est pas conservé ; les éléments concernés sont comptés pour que vous le sachiez.
- Le JSON est analysé strictement : pas de commentaires, pas de virgules finales, pas de guillemets simples, pas de caractères de contrôle non échappés, imbrication jusqu’à 64 niveaux. Un objet par ligne (JSON Lines) n’est pas accepté — englobez d’abord les objets dans un tableau.
- Les références d’entité XML (& < >) sont conservées telles quelles dans le texte et les attributs (non décodées), pour qu’un aller-retour reproduise les octets exacts. L’échappement est ajouté du côté JSON → XML : & < > sont échappés dans le texte, et « est échappé dans les valeurs d’attribut.
- Hors périmètre : XSLT, XPath, validation XML Schema, les espaces de noms autrement que comme partie du nom de balise, le JSON à clés en double (la dernière gagne, comme JSON.parse) et la conservation de l’ordre des commentaires. Rien n’est envoyé, stocké ou placé dans l’URL.
Outils associés
Ce dont on a généralement besoin ensuite, une fois les données dans l’autre format.