¿Qué es la conversión XML ↔ JSON?
XML (Extensible Markup Language) es un formato de texto basado en etiquetas para datos jerárquicos. Lo encontrarás en servicios web SOAP, feeds RSS y Atom, registros de salud HL7 FHIR, archivos sitemap.xml y los archivos de configuración que se incluyen con Maven, Spring y Android Gradle. JSON (JavaScript Object Notation, definido por la RFC 8259) describe el mismo tipo de datos anidados, pero con llaves y arrays en lugar de etiquetas de apertura y cierre. JSON es lo que habla prácticamente toda API REST hoy en día y es la forma de valor nativa de cada runtime de navegador. Convertir entre los dos formatos es uno de esos trabajos que suena trivial hasta que encuentras atributos, contenido mixto, hijos repetidos y CDATA. Una regex personalizada es la respuesta incorrecta; un analizador real es la correcta. Esta herramienta incluye un analizador real (fast-xml-parser) y lo ejecuta en tu navegador, para que puedas pegar un envolvente XML devuelto por un servicio SOAP heredado y verlo convertirse en un objeto JSON que puedes insertar directamente en un store de Redux, o tomar una carga útil JSON que has montado en un cliente REST y convertirla de vuelta a la forma XML que un endpoint empresarial todavía espera.
¿Cómo funciona el mapeo XML ↔ JSON?
Cada conversión se ejecuta localmente en tu navegador usando la biblioteca fast-xml-parser incluida (MIT, versión 4.x). Las reglas de mapeo de alto nivel son:
- Elemento a clave: cada nombre de elemento XML se convierte en una clave de objeto JSON.
<user><name>Alice</name></user>se mapea a{"user":{"name":"Alice"}}. - Atributo a clave con prefijo: un atributo se almacena bajo una clave formada anteponiendo el prefijo elegido. Con prefijo
@,<user id="1">produce{"user":{"@id":"1"}}. - Contenido de texto a clave de nodo de texto: cuando un elemento tiene tanto atributos como texto, el texto se coloca bajo la clave de nodo de texto elegida.
<price currency="USD">9.99</price>con clave#textproduce{"price":{"@currency":"USD","#text":"9.99"}}. - Hijos repetidos a array: cuando Forzar array para etiquetas hijo repetidas está activado, múltiples elementos hermanos con el mismo nombre colapsan en un array JSON.
<items><item>A</item><item>B</item></items>se convierte en{"items":{"item":["A","B"]}}. - Secciones CDATA: el texto sin procesar dentro de
<![CDATA[…]]>se preserva bajo la clave#cdatapara que los corchetes angulares y los ampersands no se re-escapen durante el viaje de ida y vuelta. - JSON a XML invierte el mapeo: las claves de objeto se convierten en elementos, las claves con prefijo se convierten en atributos y los arrays se expanden en elementos hermanos repetidos.
¿Por qué convertir XML y JSON con esta herramienta?
- Tus datos permanecen en tu máquina. Cada análisis y cada construcción se ejecuta en el contexto JavaScript de esta página. Paquetes de pacientes FHIR, envoltorios de autenticación SOAP, archivos de configuración propietarios, exportaciones de facturación — nada toca nuestros servidores, porque no hay un paso de subida en el camino del código. Abre el panel de red y compruébalo.
- El caso más común que escuchamos es integrar SOAP heredado en un front-end moderno. Un banco o aseguradora expone un endpoint SOAP que no se retirará en años; la aplicación React o Vue que lo llama no quiere aprender XML. Pega el envolvente, obtén el JSON de vuelta con atributos con prefijo y espacios de nombres preservados, inserta el contenido de
Bodyen tu store de estado. - Los consumidores de RSS, Atom y sitemaps también se benefician. Un directorio de podcasts, un agregador de noticias o un panel de control interno que ingiere
sitemap.xmlpuede saltarse completamente escribir un analizador XML. Convierte el feed una vez, trabaja con el array JSON y tu código cliente sigue en el lenguaje que ya habla. - Las exportaciones de configuración completan la lista. Maven, Spring, Android Gradle y Ant emiten XML; las herramientas cloud-native del otro lado (Terraform, Ansible, GitHub Actions, cloud-init) leen JSON o YAML. Convierte en el navegador en lugar de ejecutar un script Python con una dependencia de terceros, especialmente útil en entornos sin conexión a Internet donde pegar en un servicio web desconocido no es una opción.
¿Cuáles son las aplicaciones comunes de la conversión XML ↔ JSON?
Conectar XML y JSON surge en ingeniería de integración, herramientas de API e ingeniería de datos. Algunos patrones dominan el trabajo:
- Puente SOAP a REST: extraer la carga útil
Bodyde un envolvente SOAP devuelto por una API bancaria o aseguradora heredada y convertirlo a JSON para que un front-end React o Vue pueda consumirlo sin una capa de proxy en el lado del servidor. - Registros de salud FHIR: convertir paquetes XML HL7 FHIR (el formato requerido por HHS/ONC y NHS Digital para el intercambio de datos clínicos) a JSON para cargarlo en una colección MongoDB Atlas o una columna PostgreSQL JSONB donde los analistas pueden consultarlos.
- Procesamiento de sitemaps y feeds: convertir un
sitemap.xmlo un feed RSS/Atom en un array JSON para que un indexador personalizado, un bot de Slack o un widget de panel de control pueda iterar las entradas sin incorporar un analizador XML como dependencia.
¿Cómo es un viaje de ida y vuelta XML ↔ JSON?
Toma un pequeño ejemplo. Pega <user id="1"><name>Alice</name></user> en la entrada, establece el prefijo de atributo en @, deja el modo en XML a JSON y pulsa Convertir. La salida es {"user":{"@id":"1","name":"Alice"}}. Cambia el modo a JSON a XML, pega ese JSON de vuelta, establece la sangría en 2 espacios y pulsa Convertir de nuevo. Obtendrás <user id="1">\n <name>Alice</name>\n</user>, estructuralmente idéntico al original. Lo único que no está garantizado en el viaje de ida y vuelta es el orden de los atributos, porque las claves de objeto JSON no están ordenadas según la especificación.
Este conversor XML ↔ JSON incluye fast-xml-parser@4 en el mismo origen, maneja atributos, CDATA, etiquetas hijo repetidas y prefijos de espacio de nombres, y sigue funcionando sin conexión una vez que la página se ha cargado. Sin paso de subida, sin proxy CDN, sin beacon de analítica, sin telemetría de ningún tipo. Cada byte de entrada y salida permanece en tu navegador, que es exactamente lo que quieres cuando la carga útil resulta ser un paquete de pacientes FHIR, un envolvente de autenticación SOAP o cualquier otra forma de datos que nadie fuera de tu equipo debería ver nunca.