Convertir XML a JSON

Funciona en tu dispositivo · Tu archivo nunca sale de tu dispositivo.

Suelta un archivo .xml o pega XML de una API, un feed o un archivo de configuración y obtén JSON con el que trabajar. El documento lo lee el propio analizador XML del navegador, en la codificación que declara su primera línea, así que todo lo que esté bien formado se convierte, y un archivo mal formado se indica con la línea y la columna del problema y qué falla ahí.

La correspondencia es fija y reversible: cada elemento pasa a ser una clave; los hermanos con el mismo nombre forman un array; los atributos se conservan en claves que empiezan por @ (id="A3" pasa a "@id": "A3"); y cuando un elemento tiene texto además de hijos o atributos, el texto va en "#text". Un elemento que solo tiene texto se convierte directamente en ese valor.

Con la detección de tipos activada, un texto como 12, true o un elemento vacío pasa a número, booleano o null; desactívala para conservarlo todo como texto. Los nombres con espacio de nombres (soap:Body) se mantienen tal cual. La vista previa muestra las primeras 200 líneas antes de descargar.

Cómo Convertir XML a JSON

  1. Suelta un archivo XML o pega el XML en el cuadro.
  2. Decide si números, booleanos y elementos vacíos deben llevar su tipo.
  3. Pulsa «Convertir a JSON» y revisa la vista previa.
  4. Descarga el .json.

Formatos admitidos y límites

Entrada
XML (.xml) – un archivo o texto pegado, en la codificación que declara
Salida
JSON con sangría, UTF-8
Atributos
Conservados como claves "@nombre"
Elementos repetidos
Pasan a ser un array
Dónde se ejecuta
En tu navegador – sin subir nada

No sirve para: Documentos que no son XML bien formado (etiquetas sin cerrar, páginas HTML) – el analizador indica el primer problema en lugar de adivinar.

Qué valores cambian de tipo

La detección de tipos se aplica tanto a los atributos como al texto, y solo cambia un valor cuando no se pierde nada. Con ella activada, id="3" pasa a "@id": 3, mientras que id="007" sigue siendo el texto "007". 1.50 también sigue como texto, porque como número se volvería a escribir como 1.5. TRUE pasa a true. Un elemento vacío como <note/>, y uno que solo contiene espacios, pasan a null; la palabra NULL sigue como texto. Las fechas como 2024-01-05 nunca se convierten.

Con la detección desactivada, los elementos vacíos pasan a "" y todos los valores se quedan como texto, exactamente como están escritos.

Lo que el JSON no puede conservar

Algunas partes de un documento XML no tienen sitio en JSON y se descartan: los comentarios, las instrucciones de procesamiento y el DOCTYPE. Las secciones CDATA pasan a texto normal, así que <a><![CDATA[<b>x</b>]]></a> da "a": "<b>x</b>".

El orden entre elementos de nombres distintos se pierde, porque cada nombre se convierte en una sola clave. En <step>1</step><note/><step>2</step>, los dos step se reúnen en "step": [1, 2], y nada registra que note estaba entre ellos. El texto mezclado con marcado pierde su sitio de la misma manera: <p>Hola <b>mundo</b> y <i>tú</i>.</p> se convierte en "b": "mundo", "i": "tú" y "#text": "Hola y .". Para documentos en los que ese orden es el contenido, como un texto con formato, esta correspondencia no es adecuada.

Espacios de nombres, entidades, errores y codificaciones

Los nombres con prefijo se conservan tal como están escritos, y las declaraciones de espacio de nombres aparecen como atributos: <soap:Envelope xmlns:soap="…"> da una clave "soap:Envelope" que contiene "@xmlns:soap", y /json-to-xml convierte las dos cosas de nuevo en el mismo XML.

Aparte de las entidades que define el propio DOCTYPE del documento, solo se entienden las cinco que trae XML (&amp; &lt; &gt; &quot; &apos;) y las numéricas como &#160;. Cuando el analizador se detiene, el mensaje da la línea y la columna y explica con palabras sencillas qué está mal: un elemento cerrado con otro nombre, un nombre desconocido como &nbsp; (escribe &#160; en su lugar), un & o un < sueltos, un segundo elemento de primer nivel o un archivo que termina antes de tiempo.

El archivo se lee en la codificación que declara su primera línea, como ISO-8859-1 o windows-1256. Sin declaración, se lee como UTF-8 o UTF-16, y las páginas de códigos antiguas se reconocen como se explica en /csv-to-json.

Preguntas frecuentes

¿Mis archivos se suben a un servidor?
No. La conversión ocurre por completo en tu navegador, con la potencia de tu propio dispositivo. El archivo no sale de tu ordenador ni de tu móvil. Y una vez que has usado una herramienta, sigue funcionando sin conexión (el video, el reconocimiento de texto y la eliminación de fondo descargan su motor desde esta web la primera vez).
¿Cómo se tratan los atributos y el contenido mixto?
Los atributos pasan a claves con el prefijo @, así que <item id="A3"> da "@id": "A3". Si un elemento tiene texto además de atributos o elementos hijos, el texto se guarda en "#text"; un elemento con solo texto se convierte directamente en ese texto.
¿Por qué un elemento es un objeto y los repetidos un array?
Un elemento que aparece una vez bajo su padre pasa a ser un objeto (o un valor); dos o más hermanos con el mismo nombre forman un array. Eso refleja el documento con exactitud, así que una lista de un solo elemento es un objeto – si tu código necesita un array en ambos casos, envuélvelo en el lado receptor.
¿Cómo queda la parte superior del JSON?
Una clave con el nombre del elemento raíz, que contiene todo lo demás – <records>…</records> pasa a {"records": {...}}. Así se conserva el nombre de la raíz y la herramienta JSON a XML puede reconstruir el mismo documento.

Herramientas relacionadas

Más en Hojas de cálculo y datos

Esta página en otros idiomas: English · العربية · Deutsch · Français · Русский · Português · 中文 · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা