JSON y XML modelan el mundo de forma distinta: JSON tiene tipos (número, booleano, null, array) y XML tiene elementos, atributos, espacios de nombres y un orden significativo. Convertir entre ambos siempre implica decidir cómo se traduce lo que uno tiene y el otro no. Este conversor aplica un mapeo explícito y predecible, preserva los arrays repetidos y te muestra el resultado al instante para que puedas ajustar la estructura antes de integrarla.
Las tres asimetrías que hacen difícil la conversión
Primera: XML no tiene tipos. <edad>30</edad> es texto, y sólo un esquema XSD puede decir que es un entero; al pasar a JSON hay que decidir si se infiere el tipo (riesgo de convertir un código postal 01001 en el número 1001) o se deja como cadena. Segunda: XML distingue entre atributos y elementos hijos, distinción que JSON no tiene; el convenio más extendido es prefijar los atributos con @. Tercera: JSON tiene arrays explícitos y XML los expresa repitiendo elementos, así que un array de un solo elemento se convierte en un elemento suelto y, al volver, deja de ser array. Es la fuente número uno de errores en integraciones SOAP.
Convenios de mapeo más usados
El convenio de Badgerfish y el de Parker fueron los pioneros, pero hoy domina el estilo de librerías como xmltodict o Jackson XML: atributos con @, contenido textual mixto en #text, y repetición de claves colapsada en array. Lo importante no es cuál elijas, sino documentarlo y aplicarlo en las dos direcciones; si el productor usa @id y el consumidor espera id, la integración falla en el primer campo. Cuando el destino es una API REST moderna, casi siempre conviene aplanar los atributos a propiedades normales y perder la distinción, porque el consumidor no la va a usar.
Espacios de nombres, prefijos y por qué se pierden
Un documento SOAP o un feed RSS mezcla varios vocabularios con prefijos (soap:, dc:, atom:). El prefijo es arbitrario: lo que identifica el vocabulario es la URI declarada en xmlns. Al pasar a JSON no hay mecanismo equivalente, así que o se conserva el prefijo como parte del nombre de la clave (frágil, porque el emisor puede cambiarlo) o se descarta (pierdes la desambiguación entre dos elementos title de vocabularios distintos). Si vas a consumir el JSON resultante, normaliza los prefijos a un conjunto fijo antes de convertir.
Escapado, CDATA y caracteres de control
En XML hay cinco entidades obligatorias (<, >, &, ", ') y los bloques CDATA permiten incrustar texto sin escapar, algo habitual en descripciones HTML dentro de un RSS. Al convertir a JSON ese contenido pasa a ser una cadena normal y el escapado que importa es el de comillas y barras invertidas. En sentido contrario, cualquier & o < de una cadena JSON debe escaparse al generar XML o el documento deja de ser well-formed. Para comprobarlo, pega el resultado en el validador de XML; para escapar contenido destinado a HTML, usa la herramienta de codificación HTML.
Cuándo sigue teniendo sentido XML
XML no es legado: la facturación electrónica española (Facturae), SEPA, HL7, ONIX y buena parte de la administración pública funcionan con XML precisamente porque permite validación estricta con XSD, firma digital de fragmentos (XMLDSig) y transformación con XSLT. JSON gana en APIs web por su ligereza y por el mapeo directo a estructuras del lenguaje. La conversión suele darse justo en la frontera: un backend moderno que debe hablar con un sistema sectorial. Ahí lo prudente es validar contra el XSD antes de enviar, porque el receptor lo hará.
Rendimiento y tamaño
El mismo dato ocupa entre un 30% y un 60% más en XML por las etiquetas de cierre, y su parseo es más costoso porque el árbol DOM lleva más nodos. En cargas grandes eso se nota: un feed de 200 MB en XML es inviable de parsear en memoria y hay que ir a un parser SAX o streaming. Si estás calculando el impacto en transferencia o almacenamiento, el conversor de bytes y la calculadora de transferencia de datos traducen esa diferencia porcentual a megabytes y a segundos reales de descarga.
Casos de uso comunes
- Consumir una API SOAP heredada desde una aplicación JavaScript.
- Convertir un feed RSS o un sitemap a JSON para procesarlo en un script.
- Preparar la carga de datos para un sistema de facturación que exige XML.
- Inspeccionar rápidamente una respuesta XML sin montar un parser.
- Migrar ficheros de configuración antiguos a un formato moderno.
Buenas prácticas
- Documenta el convenio de mapeo (atributos, arrays, texto mixto) y aplícalo en ambas direcciones.
- Trata como cadena todo lo que pueda llevar ceros a la izquierda.
- Fuerza array cuando el elemento pueda repetirse, aunque en la muestra aparezca una sola vez.
- Valida el XML generado contra su XSD antes de enviarlo a un tercero.