Convertissez du JSON en XML ou du XML en JSON dans la page : les clés deviennent des éléments, les clés - des attributs, les éléments répétés reviennent en tableaux, et une entrée illisible est signalée avec la position où l’analyseur s’est arrêté au lieu de produire un résultat cassé.
Fonctionne localement dans votre navigateurJSON vers XML transforme un objet ou un tableau JSON en document XML ; XML vers JSON relit un document XML sous forme de JSON. Les deux sens s’exécutent dans la page : rien de ce que vous collez n’est envoyé, et le résultat s’affiche dans le panneau sous les boutons.
Les deux boutons d’exemple chargent le même petit catalogue dans les deux formats : convertir l’exemple JSON donne l’exemple XML, et reconvertir cet exemple XML redonne l’exemple JSON.
Le document reçoit exactement un élément racine. Une seule clé de premier niveau devient cet élément — {"user":{"name":"Ann"}} s’écrit <user><name>Ann</name></user> —, alors que plusieurs clés, un tableau de premier niveau et une clé unique contenant un tableau sont enveloppés dans <root> ; les éléments de tableau sans nom propre s’écrivent <item>.
Dans un élément, une clé devient un élément enfant et un tableau répète son élément une fois par entrée. Une clé qui commence par - devient un attribut et #text devient le texte de l’élément : {"a":{"-x":"1","#text":"hi"}} s’écrit <a x="1">hi</a>, la forme que produit le sens XML vers JSON, ce qui permet d’enchaîner les deux sens. null et "" donnent <name />.
Les noms sont réparés plutôt qu’écrits incorrectement : un espace, < ou & dans une clé, ou une clé qui commence par un chiffre, s’écrit avec un tiret bas, et la ligne d’état indique combien de noms ont été modifiés. Le balisage présent dans une valeur est échappé, et les guillemets, retours à la ligne et tabulations d’une valeur d’attribut s’écrivent ", et 	 pour que le document reste valide.
Les attributs reviennent avec le préfixe -, un élément qui ne contient que du texte devient une chaîne, un élément avec des enfants devient un objet, et un nom présent plusieurs fois devient un tableau : <r><i>1</i><i>2</i></r> donne {"r":{"i":["1","2"]}}, alors qu’un seul <i> reste une chaîne. XML ne connaît pas de types : les valeurs arrivent donc sous forme de chaînes — 24.90 en XML devient "24.90" en JSON.
Un élément sans contenu devient une chaîne vide, le texte dans un élément est conservé tel qu’il est écrit, espaces et retours à la ligne compris, et l’indentation entre éléments est ignorée. Les commentaires sont ignorés, les sections CDATA sont lues comme du texte, et le texte qui partage un élément avec des enfants est regroupé dans une clé #text.
La conversion s’exécute dans la page : réseau bloqué, elle fonctionne toujours et n’envoie aucune requête — un document qui ne doit pas quitter votre machine peut donc être converti ici. Les résultats jusqu’à 120 000 caractères sont colorés, les plus longs sont affichés en texte brut : 1 000 lignes (45 Ko de JSON vers 99 Ko de XML) demandent environ 0,8 seconde avec coloration, tandis que 5 000 lignes (233 Ko vers 503 Ko, puis 618 Ko de JSON au retour) demandent environ 0,2 seconde au total, mesuré dans Chrome sur cette page.
C’est un convertisseur de format, pas un outil de schéma : aucune validation XSD ou DTD, aucune gestion des espaces de noms (un deux-points dans un nom s’écrit avec un tiret bas) et aucune inférence de type. Un document imbriqué sur des milliers de niveaux est refusé avec un message plutôt que de laisser un document incomplet à l’écran.