100 % local: tus datos nunca salen de tu navegador

XML a JSON — atributos incluidos

Convierte XML a JSON. Atributos, elementos repetidos y texto acaban todos en un sitio al que llegas con un punto o un corchete desde tu código.

Instantáneo Privado Cero cookies
Indentación
Invertir: JSON → XML

Entrada XML

Salida JSON

Qué hace esta herramienta

Cada elemento se convierte en clave; sus hijos, en el valor.

<user id="1"><name>Ada</name></user>
{ "user": { "name": "Ada", "@_id": "1" } }

Tres puntos donde los modelos discrepan

XML y JSON no describen las mismas formas, y todo conversor tiene que elegir. Estas son las elecciones.

Los atributos

Pasan a ser claves con el prefijo @_. JSON tiene una sola clase de miembro; XML tiene atributos y elementos, y pueden compartir nombre: <user id="1"><id>2</id></user> guarda dos cosas distintas llamadas id. El prefijo las separa. Un interruptor descarta los atributos si no los necesitas.

Cuando un elemento lleva texto y atributos a la vez, el texto queda bajo #text.

La repetición

Un <item> da un objeto. Dos dan un array.

<r><i>1</i></r>          →  { "r": { "i": 1 } }
<r><i>1</i><i>2</i></r>  →  { "r": { "i": [1, 2] } }

No es un defecto corregible: nada en un documento XML dice si un elemento es repetible. Solo un esquema lo sabe. Si tu código espera una lista, normalízala al recibirla.

El contenido mixto

Este JSON simplemente no puede expresarlo, y conviene decirlo sin rodeos.

<p>Hola <b>mundo</b> otra vez</p>

JSON no tiene forma de decir que Hola iba antes de <b> y otra vez después. Los fragmentos de texto se reúnen bajo #text y su posición respecto a los elementos se pierde, junto con el espaciado entre ellos. Si lo que importa es el texto —un documento más que un registro—, no conviertas: usa el formateador XML.

Los tipos

<a>1</a> da el número 1. <a>007</a> da la cadena "007", porque un cero inicial suele ser un código postal o un número de cuenta, y leerlo como siete lo pierde. Un identificador de veinte dígitos también sigue siendo cadena: un número JSON lo redondearía.

Lo que no es dato

La declaración XML y cualquier instrucción de procesamiento se descartan. Describen el documento, no su contenido: una clave ?xml junto a tu elemento raíz nunca fue información que hubieras pedido.

Privado por diseño

Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.

Preguntas frecuentes

¿Por qué mi único <item> se convirtió en objeto y no en array?
Porque nada en un documento XML dice si un elemento se repite. Un `<item>` es idéntico a una lista de uno, y solo un esquema conoce la diferencia. A partir de dos es un array; con uno, un objeto. Si tu consumidor quiere una lista en ambos casos, normalízala allí: `Array.isArray(x) ? x : [x]` es la línea habitual.
¿Por qué los atributos llevan el prefijo @_?
Porque JSON tiene una sola clase de miembro y XML tiene dos. `<user id="1"><id>2</id></user>` contiene un atributo y un elemento llamados ambos `id` que no son lo mismo; sin prefijo, uno sobrescribiría al otro. El interruptor elimina los atributos por completo si prefieres no verlos.
¿Por qué <a>007</a> sigue siendo cadena y <a>7</a> se vuelve número?
Porque el cero inicial casi siempre significa algo: un código postal, un número de cuenta, una referencia de pieza. Leer `007` como el número siete lo pierde para siempre. Un número sin ceros iniciales se convierte; lo que un número JSON no puede guardar exacto, como un identificador de veinte dígitos, sigue siendo cadena por la misma razón.

Convertidores relacionados