XML ↔ JSON
FormatoTodo se ejecuta en tu navegador: no se sube nada
⚠️ Esta conversión es intrínsecamente con pérdida, y pierde más de lo que parece. XML y JSON tienen modelos de datos distintos; no son dos notaciones de lo mismo: · Atributos frente a elementos hijos — `<a b="1"/>` y `<a><b>1</b></a>` son cosas distintas en XML (metadatos frente a contenido). El prefijo `@` las distingue en JSON y al volver se recuperan. · Contenido mixto — en `<p>antes<b>negrita</b>después</p>` el texto y los elementos están intercalados. Un objeto JSON no tiene noción de orden, así que esa estructura se pierde forzosamente. · Etiquetas repetidas — dos se vuelven un array y una se queda como escalar, así que el JSON no puede mostrar la diferencia entre «hay una» y «solo puede haber una»; al volver, un array de un elemento se convierte en un solo elemento. · Comentarios, instrucciones de procesamiento, DOCTYPE — no tienen equivalente en JSON. Se descartan y se cuentan. · Espacios de nombres — el prefijo se conserva como parte del nombre de etiqueta (`xs:element`), pero no se resuelven los espacios de nombres: dos documentos con prefijos distintos para el mismo espacio dan claves distintas. Así que aquí se convierte con una convención fija y se informa de cada pérdida —cuántos comentarios, qué elementos tenían contenido mixto— en lugar de entregar en silencio un JSON que parece completo. ⚠️ El elemento raíz no se despliega: `<a><b>1</b></a>` se convierte en `{"a":{"b":"1"}}`, no en `{"b":"1"}`. Desplegarlo se ve más limpio, pero deja la dirección inversa imposible: ¿cómo se llamaría el elemento raíz al convertir `{"b":"1"}` de vuelta? El nombre se descartó en ese paso. Esta herramienta va en los dos sentidos, así que ambos comparten una única convención. Todo ocurre en tu navegador.
Funciones
- Las dos direcciones, XML → JSON y JSON → XML, o se fija una a mano
- ⚠️ Informa de lo que la conversión perdió: el número de comentarios, instrucciones de procesamiento y DOCTYPE
- ⚠️ Detecta el contenido mixto (texto intercalado con elementos) y avisa de que esa estructura ya se perdió
- ⚠️ Cierra con una nota sobre por qué la conversión pierde información y para qué sirve y para qué no
- Los atributos pasan a `@nombre`; el texto va a `#text` cuando hay algo más en el elemento
- Los elementos hermanos repetidos se vuelven un array; uno solo se queda como escalar
- El CDATA se funde con el texto (JSON no los distingue)
- ⚠️ Los nombres de etiqueta y atributo distinguen mayúsculas: así es XML, a diferencia de HTML
- ⚠️ Los prefijos de espacio de nombres se conservan tal cual y no se resuelven, con el motivo explicado
- ⚠️ En el sentido inverso, los nombres de clave ilegales se omiten y se listan, nunca se reescriben en silencio
- ⚠️ XML es más estricto que HTML: las etiquetas deben cerrarse, los valores de atributo deben ir entre comillas y una entidad que XML no define es un error, cada uno con su posición
- Todo ocurre en tu navegador
Cómo se usa
- Pega XML o JSON; la dirección se detecta (lo que empieza por `<` se trata como XML)
- Marca «Mostrar también la convención de conversión» si quieres verla
- Mira primero el resultado y después la sección de «lo que esta conversión perdió»
Preguntas frecuentes
- ¿Por qué no desplegar el elemento raíz?
- Porque entonces la dirección inversa no funciona. Desplegado, `<a><b>1</b></a>` pasa a `{"b":"1"}` y el nombre de la raíz, `a`, desaparece. ¿Cómo se llamaría el elemento raíz al volver? Habría que inventar un `<root>`, y ese nombre no está en tus datos. Esta herramienta va en los dos sentidos, así que ambos comparten una única convención y la raíz se queda envuelta. La prueba de ida y vuelta fija justamente esto: XML a JSON y de vuelta debe ser semánticamente idéntico.
- ¿Qué es el «contenido mixto» y por qué se pierde forzosamente?
- Significa texto y elementos hijos intercalados dentro de un elemento: `<p>antes<b>negrita</b>después</p>`. Eso es XML perfectamente legal y el orden tiene significado: «después» tiene que ir detrás de ese `<b>`. Un objeto JSON es un conjunto sin orden de claves y no puede expresar «texto entre el primer y el segundo hijo». Así que el texto se concatena y su posición se pierde. Conservarlo implica no convertir, o usar un formato que exprese orden. Al menos aquí se cuenta cuántos elementos están afectados, para que sepas dónde está el daño.
- ¿Por qué ` ` da error?
- Porque XML solo predefine cinco entidades: `lt`, `gt`, `amp`, `quot` y `apos`. ` ` es de HTML y no está entre ellas: un documento que la use no está bien formado. Descodificarla con manga ancha haría que un documento roto pareciera del todo normal, y quien tiene un resultado que «funciona» no va a investigar por qué otras herramientas lo rechazan. Escribe ` ` si quieres ese carácter.
- ¿De verdad es tan distinto analizar XML y HTML?
- Mucho. HTML está diseñado para ser tolerante: etiquetas sin cerrar, valores de atributo sin comillas, mayúsculas y minúsculas mezcladas; el navegador hace lo que puede. XML está diseñado para ser estricto: las etiquetas deben emparejarse, los valores de atributo deben ir entre comillas, las mayúsculas importan (`<Element>` y `<element>` son dos cosas distintas) y una entidad que XML no define es un error. Por eso el analizador de HTML del navegador no sirve para leer XML: repara en silencio justo los problemas de tu documento que necesitas conocer.
- ¿Cuándo conviene usarlo y cuándo no?
- Úsalo para mover datos entre servicios: una API que solo emite XML mientras tu código prefiere JSON, o una configuración que hay que dar a un sistema antiguo que solo lee XML. No lo uses para editar documentos XML. Si el documento tiene contenido mixto, comentarios o espacios de nombres, tras una ida y vuelta ya no será el mismo, y nada te avisará. Para editar XML, usa una herramienta que conserve el original.
Herramientas relacionadas
Formateador JSON
FormatoFormatea, valida y repara JSON en línea: árbol plegable, búsqueda de claves y valores, edición nodo a nodo y errores con línea y columna.
Conversor YAML
FormatoConvierte YAML a JSON y al revés: varios documentos, anclas y claves de fusión, enteros grandes exactos y errores de análisis con línea y columna.
Conversor TOML
FormatoConvierte TOML y JSON en ambos sentidos: los cuatro tipos de fecha y hora, arrays de tablas, claves con puntos, enteros grandes e inf/nan intactos.
JSON a código
FormatoConvierte una muestra JSON en interfaces de TypeScript, structs de Go, clases de Java o structs de Rust; las claves que faltan salen opcionales.
Formateador SQL
FormatoFormatea SQL en línea: una cláusula por línea, palabras clave con el mismo estilo y subconsultas sangradas. El minificador quita los comentarios.
Conversor JSON5
FormatoPasa JSON5 a JSON estricto: comentarios, claves sin comillas, comillas simples, comas finales, hexadecimal e Infinity, con errores por línea y columna.