Convierte JSON a XML o XML a JSON en la página: las claves se convierten en elementos, las claves - en atributos, los elementos repetidos vuelven como arrays y la entrada que no se puede analizar se avisa con la posición donde se detuvo el analizador en lugar de dar un resultado roto.
Se ejecuta localmente en tu navegadorJSON a XML convierte un objeto o un array JSON en un documento XML; XML a JSON lee un documento XML como JSON. Las dos direcciones se ejecutan en la página, así que nada de lo que pegas se sube, y el resultado aparece en el panel situado debajo de los botones.
Los dos botones de ejemplo cargan el mismo catálogo pequeño en los dos formatos: si conviertes el ejemplo JSON obtienes el ejemplo XML, y si conviertes ese ejemplo XML de vuelta recuperas el ejemplo JSON.
El documento tiene exactamente un elemento raíz. Una única clave de nivel superior se convierte en ese elemento — {"user":{"name":"Ann"}} se escribe como <user><name>Ann</name></user> —, mientras que varias claves, un array de nivel superior y una única clave que contiene un array se envuelven en <root>; los elementos de un array sin nombre propio se escriben como <item>.
Dentro de un elemento, una clave se convierte en un elemento hijo y un array repite su elemento una vez por elemento de la lista. Una clave que empieza por - se convierte en un atributo y #text en el texto del elemento, así que {"a":{"-x":"1","#text":"hi"}} se escribe como <a x="1">hi</a>, la misma forma que produce la dirección XML a JSON, que es lo que permite encadenar las dos direcciones. null y "" se escriben como <name />.
Los nombres se reparan en lugar de escribirse mal: un espacio, < o & en una clave, o una clave que empieza por un dígito, se escribe con un guion bajo, y la línea de estado indica cuántos nombres se han cambiado. El marcado dentro de un valor se escapa, y las comillas, los saltos de línea y los tabuladores de un valor de atributo se escriben como ", y 	 para que el documento siga siendo válido.
Los atributos vuelven con el prefijo -, un elemento que solo contiene texto se convierte en una cadena, un elemento con hijos se convierte en un objeto y un nombre que aparece más de una vez se convierte en un array: <r><i>1</i><i>2</i></r> da {"r":{"i":["1","2"]}}, mientras que un solo <i> sigue siendo una cadena. XML no tiene tipos, así que los valores llegan como cadenas: 24.90 en XML es "24.90" en JSON.
Un elemento sin contenido se convierte en una cadena vacía, el texto dentro de un elemento se conserva tal como está escrito, con sus espacios y saltos de línea, y la sangría entre elementos se ignora. Los comentarios se omiten, las secciones CDATA se leen como texto y el texto que comparte un elemento con elementos hijos se recoge en una clave #text.
La conversión se ejecuta en la página: con la red bloqueada sigue funcionando y no envía ninguna petición, así que un documento que no puede salir de tu equipo se puede convertir aquí. Los resultados de hasta 120.000 caracteres se resaltan con colores y los más grandes se muestran como texto plano: 1.000 filas (45 KB de JSON a 99 KB de XML) tardan unos 0,8 segundos con resaltado, mientras que 5.000 filas (233 KB a 503 KB, y de vuelta a 618 KB de JSON) tardan unos 0,2 segundos en total, medido en Chrome en esta página.
Es un conversor de formato, no una herramienta de esquemas: no hay validación XSD ni DTD, no se gestionan espacios de nombres (los dos puntos de un nombre se escriben como guion bajo) y no se deducen tipos. Un documento anidado miles de niveles se rechaza con un mensaje en lugar de dejar un documento a medias en pantalla.