Convierte XML a JSON (o JSON de vuelta a XML) en tu navegador, elige cómo se manejan los atributos, y obtén un error claro de línea/columna. Sin subir nada.
🔒 Privado por diseño: tu texto se procesa localmente en tu navegador; nada se sube nunca a ningún servidor.
Escrito y mantenido por Javi Morales·Última actualización
Cómo convertir XML a JSON (o al revés)
Pega tu XML (un archivo de configuración, una respuesta de API, un feed RSS, una carga SOAP) en la caja de arriba.
Deja Dirección en “XML → JSON” (por defecto), elige cómo quieres que se manejen los atributos y un tamaño de sangría, luego haz clic en Convertir.
Tu JSON convertido aparece al instante debajo. Si el XML está mal formado, obtienes un mensaje específico con la línea y columna exactas en lugar de un fallo genérico.
¿Necesitas ir en la otra dirección? Cambia Dirección a “JSON → XML”, pega JSON con la forma {"root": {...}} en su lugar, y haz clic en Convertir de nuevo.
Por qué convertir entre XML y JSON
XML y JSON representan ambos datos estructurados (elementos/claves, valores anidados, elementos repetidos) pero XML es anterior a JSON por años y todavía aparece constantemente tras bambalinas: servicios web SOAP heredados, feeds RSS/Atom, manifiestos de Android, configuración Java/Spring, y muchas APIs empresariales internas que nunca migraron fuera de él. JSON es lo que espera casi cualquier herramienta JavaScript moderna, cliente REST y formato de configuración en su lugar. Necesitar moverse entre ambos surge en el trabajo real: alimentar una respuesta SOAP heredada en una canalización solo de JSON, convertir un feed RSS en JSON para procesarlo con fetch()/JSON.parse, o convertir una configuración JSON de vuelta a la forma XML que un sistema antiguo todavía requiere.
Convertir a mano es propenso a errores precisamente porque ambos formatos discrepan en los detalles que importan: XML no tiene ningún concepto nativo de array (la repetición es simplemente “más elementos hermanos con la misma etiqueta”), los atributos no tienen ningún equivalente en JSON, y el contenido de texto puede quedar incómodamente junto a atributos y elementos hijo en el mismo elemento. Esta herramienta toma una decisión explícita y documentada para cada uno de esos casos en lugar de dejarte adivinar.
Un mapeo documentado, no una caja negra
Cada caso ambiguo en la conversión XML↔JSON se decide y se declara en lugar de dejarse implícito: los atributos van bajo una clave con prefijo @ por defecto (o se fusionan como claves planas, con un riesgo de colisión declarado, si eliges esa opción); el propio texto de un elemento se convierte en una clave #text solo cuando también tiene atributos o hijos, si no, es simplemente el valor de cadena plano; y los elementos hermanos repetidos con la misma etiqueta se convierten en un array JSON, mientras que una etiqueta que solo aparece una vez se queda como un valor plano en lugar de un array innecesario de un elemento. Yendo en la otra dirección, JSON→XML invierte cada una de esas decisiones, así que una ida y vuelta real a través de esta herramienta (en el modo Prefijo por defecto) recupera estructuralmente los mismos datos con los que empezaste.
Privado, porque tus datos nunca salen de tu dispositivo
Las cargas XML y JSON habitualmente llevan detalles reales del sistema, las cabeceras de autenticación de una petición SOAP, una respuesta de API con registros de clientes, una exportación de configuración con nombres de host internos. Muchos sitios de “conversor de xml a json online gratis” en silencio pasan el contenido pegado por un backend de todos modos. Esta herramienta se ejecuta enteramente usando el propio DOMParser incorporado de tu navegador más el simple JSON.parse/JSON.stringify en la misma pestaña, nada se transmite, se registra ni se almacena, y funciona idénticamente sin conexión una vez que la página ha cargado.
Usos habituales
Convertir una respuesta SOAP o XML-RPC heredada en JSON para procesarla con JavaScript moderno basado en fetch().
Convertir un feed RSS o Atom en JSON para que un script recorra sus elementos con métodos de array planos en lugar de recorrido del DOM.
Convertir una configuración JSON de vuelta a la forma XML que un sistema antiguo (manifiesto de Android, configuración Spring/Maven, un endpoint SOAP heredado) todavía requiere.
Depurar exactamente cómo se mapearán a JSON los atributos y elementos repetidos de un documento XML antes de conectar una integración completa.
Reformatear el JSON equivalente directamente, ver el compañero Formateador y Validador de JSON si lo que manejas ya es JSON.
Convertir un manifiesto de Kubernetes o un archivo docker-compose, ver el compañero Conversor de YAML a JSON si tu entrada es YAML en lugar de XML.
Embellecer o validar XML sin convertirlo a JSON, ver el compañero Formateador y Validador de XML si solo necesitas leer o comprobar el propio XML.
Convertir el JSON resultante a CSV después, ver Convertir JSON a CSV para convertir los datos en hoja de cálculo una vez que ya son JSON.
Cómo funciona, en imágenes
Conversor de XML a JSON en pleno proceso: la entrada de ejemplo «<tools><tool slug="png-to-jpg" category="image"/…», Direction en XML to JSON, Attribute handling, XML to JSON only en Prefix with an at sign, safe and round-trip friendly.El resultado final: la salida generada «{ "tools": { "tool": [ { "@slug": "png-to-jpg", …». El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.
Preguntas frecuentes
¿Se envía mi XML o JSON a un servidor para convertirlo?
No. Esta herramienta se ejecuta enteramente dentro de tu pestaña del navegador en el momento en que haces clic en Convertir, usando el propio DOMParser incorporado del navegador para leer XML más el propio JSON.parse/JSON.stringify de JavaScript, sin biblioteca, sin petición de red. Esto importa porque tanto XML como JSON aparecen en cargas de API, exportaciones de configuración y volcados de datos internos que pueden llevar detalles reales del sistema que no querrías entregar a los registros de acceso de un servidor cualquiera.
¿Cómo se representan los atributos XML en la salida JSON?
Depende de la opción "Manejo de atributos". La opción por defecto, "Prefijo con @", pone cada atributo bajo una clave como @id o @currency, por ejemplo, `<price currency="USD">19.99</price>` se convierte en `{"@currency":"USD","#text":"19.99"}`. La alternativa, "Fusionar como claves hermanas planas", quita la @ y pone el atributo directamente junto a cualquier clave de elemento hijo en su lugar, pero esto tiene un riesgo de colisión real y declarado: si un atributo y un elemento hijo comparten exactamente el mismo nombre (por ejemplo `<person name="Alice"><name>Bob</name></person>`), el valor del elemento hijo gana en silencio sobre el del atributo, ya que ambos acaban intentando usar la misma clave plana. El modo Prefijo nunca tiene este problema, ya que @name y name nunca pueden colisionar.
¿Qué significa #text, y cuándo aparece?
Un elemento SIN atributos ni elementos hijo se colapsa a una simple cadena, `<name>Ann</name>` se convierte en "Ann", no en un objeto. Pero en cuanto un elemento tiene atributos y/o elementos hijo, su PROPIO texto directo necesita ir a algún sitio que no colisione con esas otras claves, así que obtiene una clave #text, solo cuando ese texto no está vacío tras recortar el espacio en blanco. El espacio en blanco de indentación ordinario entre elementos hijo nunca produce una clave #text.
Si una etiqueta aparece solo una vez, ¿por qué no se envuelve en un array de 1 elemento?
Esta herramienta deliberadamente mantiene una única aparición como un valor plano u objeto en lugar de envolver siempre las etiquetas repetibles en un array, algunas otras bibliotecas de xml-a-json usan por defecto siempre-array para consistencia estructural, pero esta herramienta optimiza para el caso mucho más común (un archivo de configuración, una carga de API) leyéndose de forma natural: `<person><name>Ann</name></person>` se convierte en `{"name":"Ann"}`, no en `{"name":["Ann"]}`. Solo cuando la MISMA etiqueta genuinamente aparece más de una vez bajo un mismo padre (por ejemplo los elementos `<item>` repetidos de un feed RSS) se convierte en un array JSON, en el orden original del documento.
¿Puedo convertir JSON de vuelta a XML también, y hace una ida y vuelta limpia?
Sí, cambia "Dirección" a "JSON → XML". El JSON debe ser un objeto con exactamente una clave de nivel superior (el nombre del elemento raíz XML), coincidiendo con la propia forma de salida de XML a JSON de esta herramienta, por ejemplo `{"root":{"a":"1"}}`. Convertir XML a JSON y de vuelta a XML en modo Prefijo es estructuralmente sólido (vuelven los mismos datos, aunque no necesariamente con un formato idéntico byte a byte, las etiquetas autocerradas hacen la ida y vuelta como pares abrir/cerrar normales, por ejemplo). El modo Fusión NO está pensado para hacer ida y vuelta: como elimina el marcador @, convertir el JSON fusionado de vuelta a XML convierte cada antiguo atributo en un elemento hijo plano en su lugar, porque ya no queda forma de saber qué claves solían ser atributos.
¿Qué ocurre con XML o JSON inválidos?
Obtienes un error específico y localizado en lugar de un fallo silencioso. Un XML inválido reutiliza la validación del propio Formateador de XML de este sitio, reportando una línea y columna directamente del analizador real del navegador, por ejemplo "XML inválido en la línea 1, columna 21, Las etiquetas de apertura y cierre no coinciden". Un JSON inválido (al convertir en la otra dirección) reutiliza el manejo de errores del propio Formateador de JSON de este sitio de la misma forma. Un documento JSON estructuralmente válido pero con la forma equivocada (con cero o más de una clave de nivel superior) obtiene su propio mensaje claro explicando que XML necesita exactamente un elemento raíz.
¿Se conservan los comentarios, las instrucciones de procesamiento y la declaración XML?
No, este es un conversor de datos, no un formateador (ver el compañero Formateador y Validador de XML si necesitas que se conserven). Los comentarios, las instrucciones de procesamiento `<?...?>`, las declaraciones DOCTYPE y el prólogo XML no llevan valor de datos y se descartan por completo, igual que la mayoría de conversores de xml a json. Solo los nombres de elemento, los atributos y el contenido de texto llegan al JSON.
¿Hay un límite de tamaño, o funciona sin conexión?
Sin límite artificial, el análisis y la conversión se ejecutan en la memoria de tu propio navegador en lugar de en una petición de red, así que una carga de API grande o una exportación de configuración funciona igual que un fragmento corto, y sigue funcionando sin conexión a internet una vez que la página ha cargado.
Compara dos bloques de texto y ve las líneas o palabras añadidas, eliminadas y cambiadas al instante en tu navegador. Nada de lo que pegas se sube nunca.
Formatea, valida y minifica JSON en tu navegador, imprime bonito, o consigue una línea/columna clara ante una entrada inválida. Nada sale de tu dispositivo.