Saltar al contenido

📄 Conversor XML ⇔ JSON

Convierte XML ⇔ JSON en ambas direcciones. Soporta prefijo de atributo, clave de texto, CDATA y detección de arrays. Maneja XML complejo como RSS o SOAP.

100% Gratis Sin registro Solo navegador 5 idiomas Modo oscuro

🔒 Sobre la privacidad

🔗 Herramientas relacionadas

📖 Dónde se suele tropezar

Convierte entre XML y JSON, con prefijo de atributo, clave de nodo de texto, manejo de CDATA y detección automática de arrays configurables, de modo que documentos enrevesados como RSS o SOAP quedan a tu alcance. Todo se ejecuta en el navegador. Ten presente, eso sí, que ambos tienen modelos de datos distintos, lo que hace la conversión intrínsecamente con pérdida: un viaje de ida y vuelta de XML a JSON y de vuelta no reproduce el archivo original. Tómalo como una importación en un solo sentido.

Caso Qué ocurre Qué hacer
El viaje de ida y vuelta produjo otro XML JSON no tiene concepto de atributo, ni mecanismo para preservar el orden de los elementos, ni comentarios. Así que un viaje de ida y vuelta pierde mucho: el orden en que se escribieron los atributos, los prefijos de espacio de nombres (que ns1: pase a ns2: es equivalente en XML), la distinción entre <a/> y <a></a>, los comentarios, el DOCTYPE, las instrucciones de procesamiento y el espacio en blanco entre elementos. Las firmas digitales son el caso grave: XMLDSig firma la propia secuencia de bytes, de modo que un viaje de ida y vuelta rompe la verificación sin más. Para SOAP o facturación electrónica eso es fatal. Diseña de modo que no haga falta ida y vuelta. Si recibes XML y lo usas dentro de tu aplicación, conviértelo a JSON y guarda el archivo original para cuando debas devolver XML, o vuelve a generarlo desde una plantilla. Donde haya firma o verificación, la respuesta correcta es una biblioteca que trabaje directamente sobre el XML: considera la conversión a JSON estrictamente una ayuda para leer el contenido. Si quieres saber cuánto se pierde con tus datos, la prueba más rápida es hacer el viaje completo y comparar con el original: conocer los límites con un experimento deliberado es mejor que descubrirlos por un incidente.
Una etiqueta repetida deja de ser array cuando sólo hay una La detección automática de arrays juzga por cuántas veces aparece realmente la etiqueta. Tres elementos <item> forman un array; uno solo se vuelve un objeto. Es decir, la forma del JSON depende de los datos y no del esquema, y el código consumidor revienta en items.map(...). Es el error más frecuente de la conversión de XML a JSON, y resulta peor porque los datos de prueba suelen traer varias entradas, así que sólo falla en producción el día en que casualmente hay una. Importar canales RSS o resultados de búsqueda es el caso clásico. Si conoces el esquema, trata siempre ese elemento como un array. La mayoría de bibliotecas ofrecen una opción alwaysArray o arrayNotation que permite enumerar los nombres de etiqueta que deben ser siempre arrays. Si la biblioteca no te da ese control, normaliza en el lado consumidor con algo como const list = [].concat(data.items?.item ?? []): convertir esa línea en costumbre elimina casi por completo esta clase de fallo. Incluye siempre cero, uno y varios en tus datos de prueba: los dos primeros son los que rompen, y los dos primeros son justo lo que los archivos de ejemplo omiten.
Las claves con espacio de nombres son incómodas en JavaScript Un elemento <dc:creator> se convierte en la clave "dc:creator". Los dos puntos descartan la notación de punto: obj.dc:creator es un error de sintaxis. RSS y Atom usan espacios de nombres siempre, así que cualquier cosa que toque canales se topa con ello: content:encoded, media:thumbnail, itunes:duration. Lo empeora que cada documento elige libremente el prefijo: el mismo URI de espacio de nombres puede ser dc: en un canal y dcterms: en otro, de modo que el código que fija un prefijo deja de funcionar con el siguiente canal. Accede con notación de corchetes, obj["dc:creator"]; las definiciones de tipos de TypeScript admiten esos mismos nombres de clave entrecomillados. Para lidiar con la variedad de prefijos, normalizar en el momento de la importación es el único enfoque práctico: o bien quitas el prefijo y lo dejas en creator, o resuelves por el URI del espacio de nombres y lo renombras a un nombre corto propio. Ojo con que quitar prefijos sin más puede provocar colisiones: dc:date y atom:date acaban ambos como date. Reunir cinco canales reales y probarlos saca a la luz prefijos que no habías previsto casi al instante, y es una comprobación más rápida que leerse las especificaciones.

Cuidado con las cadenas que parecen números. En XML todo es texto, así que <zip>007-0000</zip> y <tel>+81...</tel> son cadenas, pero algunas implementaciones convierten automáticamente en número todo lo que lo parezca, y en ese instante el cero inicial desaparece, 1e5 pasa a 100000 y +81 pasa a 81. Códigos postales, teléfonos, códigos de producto y números de versión deben configurarse para permanecer como cadenas. Segundo: al analizar en el servidor XML de origen externo, ten presente XXE, la expansión de entidades externas. El DOMParser del navegador no expande entidades externas, así que esta página es segura, pero varios analizadores de servidor lo traen activado por defecto. En PHP eso significa no pasar LIBXML_NOENT; en Java, desactivar las entidades externas con setFeature. Es la vulnerabilidad clásica de lectura de cualquier archivo local, y se sigue encontrando con toda normalidad.

📖 Cómo usar

  1. 1
    Configurar dirección y opciones
    Elige XML a JSON o JSON a XML y configura prefijo de atributo, clave de texto e indentación.
  2. 2
    Ingresar datos
    Pega XML o JSON a la izquierda. Usa los botones de Ejemplo para cargar RSS o JSON con atributos.
  3. 3
    Copiar o descargar el resultado
    El resultado aparece a la derecha en tiempo real. Usa Copiar o Descargar para guardarlo.

❓ Preguntas frecuentes

¿Cómo se representan los atributos y nodos de texto?
Los atributos se guardan con un prefijo (p.ej. @id) y los nodos de texto bajo una clave (p.ej. #text). Ambos son configurables.
¿Se soportan secciones CDATA?
Sí. XML a JSON conserva el contenido CDATA como texto. JSON a XML envuelve automáticamente en CDATA los valores con caracteres reservados.
¿Las etiquetas repetidas se convierten en arrays?
Si Array Auto está activo, dos o más etiquetas hermanas con el mismo nombre se agrupan en un array. Si está desactivado, se sobrescriben.
🐛 ¿Encontró un problema con esta herramienta?

Gratis, sin registro. Incluso solo los pasos para reproducir ayudan. Los informes van directamente al operador y se usan para corregir.

* Se envía automáticamente la info del navegador (UA / pantalla / idioma / URL) para reproducir