ToolActToolAct

Conversor de XML a JSON

Entrada XML
Salida JSON
Líneas: 1Caracteres: 0Bytes: 0
Líneas: 1Caracteres: 0Bytes: 0

¿Qué es la conversión de XML a JSON?

XML to JSON convierte marcado XML en una estructura JSON para manejar datos con más facilidad en JavaScript, APIs, herramientas no-code o pipelines modernos. El mapeo no siempre es evidente porque XML tiene elementos, atributos, nodos de texto, espacios de nombres, orden y nodos repetidos, mientras JSON usa objetos, arrays y valores simples. La herramienta es útil para integraciones legacy, respuestas SOAP, sitemaps, feeds RSS, configuraciones y datos de prueba. En interfaces productivas deben revisarse atributos, elementos vacíos, contenido mixto, namespaces y detección de arrays. Que el JSON se parse correctamente no significa automáticamente que toda la información de negocio se preservó con la forma esperada.

Cómo usar

Cómo usar

  1. Pega o introduce datos XML en el cuadro de entrada izquierdo
  2. Selecciona el tamaño de sangría (2 espacios, 4 espacios o Tab)
  3. El JSON convertido se muestra a la derecha con resaltado de sintaxis
  4. Revisa el resultado de la conversión y corrige cualquier error en el XML
  5. Haz clic en Copiar o Descargar para guardar el resultado

Notas sobre la estructura de datos

  • Los atributos XML, nodos repetidos, espacios de nombres y texto mixto pueden mapearse a JSON de varias maneras válidas; inspecciona la estructura generada antes de usarla.
  • Para migraciones de API, define una regla de mapeo de campos en lugar de depender de una única conversión de muestra.

Casos de uso

Convierte un payload XML en JSON legible para inspecciónPega XML de SOAP, RSS, dispositivos o partners y el DOMParser del navegador convierte el documento en un objeto JSON que conserva el elemento raíz, anida los elementos hijos y agrupa en arrays los nombres de hijos repetidos. El texto numérico y los valores true o false se convierten cuando son lo bastante simples para reconocerlos. El parser sigue la especificación W3C DOM Level 3 Core, por lo que cualquier entrada XML 1.0 bien formada que DOMParser acepte producirá un árbol transitable, y el paso a JSON simplemente recorre ese árbol en profundidad, contando duplicados hermanos para decidir entre un objeto único y un array JSON.
Prepara datos de ejemplo antes de reemplazar una integración XMLUsa el editor de dos paneles para comparar el XML original con el JSON formateado, luego copia o descarga output.json para una nota de migración, fixture de prueba o discusión de API. La indentación puede alternarse entre 2 espacios, 4 espacios y tabulaciones para ajustarse al código destino.
Detecta XML malformado antes de que llegue a un flujo de trabajo dependiente del parserEl convertidor muestra errores de parseo del parser XML del navegador en lugar de producir silenciosamente una salida parcial. Se centra en elementos y contenido de texto, por lo que atributos, namespaces, comentarios, instrucciones de procesamiento y validación de esquema siguen requiriendo una herramienta XML dedicada cuando esos detalles importan.
Decide cómo los atributos se convierten en claves JSONCuando un elemento mezcla atributos con elementos hijos, los atributos suelen prefijarse con @ para que no colisionen con el contenido de texto o los hijos con nombre. Revisa el JSON generado en busca de campos como @id o @type y renómbralos en el código consumidor si se prefiere una estructura de claves plana. El mapeo convencional es `@attribute` para atributos XML, `#text` para datos de texto junto a elementos hijos, y el nombre local del elemento para cada hijo, siguiendo la convención Badgerfish usada por muchas librerías JSON-XML.
Identifica archivos XML que el convertidor simplifica intencionadamenteLos documentos que dependen de atributos, namespaces, instrucciones de procesamiento, comentarios o bloques CDATA perderán detalle en la salida JSON. Trata el resultado como una vista rápida de lectura, no como un objetivo de migración sin pérdida, cuando esas características XML llevan los datos de negocio. La detección de arrays solo se activa con nombres de elementos hijos repetidos, por lo que un solo `<item>` y dos `<product>` hermanos se colapsan en un objeto con dos claves en lugar de una lista, y el namespace en notación Clark `{http://example.com/ns}user` se elimina del nombre local `user`, lo que puede colisionar con otro elemento sin namespace del mismo nombre.

Principio técnico

La conversión comienza con el parser XML integrado del navegador. `new DOMParser().parseFromString(xmlString, 'application/xml')` devuelve un `Document` que sigue W3C DOM Level 3 Core, valida la correcta formación según XML 1.0 (Quinta Edición) y expone el resultado como un árbol de nodos `Element`, `Attr`, `Text`, `CDATASection` y `Comment`. Si la entrada está mal formada, el parser no lanza una excepción, sino que devuelve un documento cuyo elemento raíz es `<parsererror>` con la ubicación y el motivo, por lo que el conversor comprueba `doc.querySelector('parsererror')` primero y muestra ese mensaje en lugar de producir JSON parcial. El mapeo del árbol a JSON recorre el documento en profundidad y sigue una convención de estilo Badgerfish. Cada elemento se convierte en una propiedad cuya clave es el nombre local; los elementos hijos se convierten en objetos anidados; los atributos de los elementos se aplanan con un prefijo `@` (por ejemplo, `<user id="7">` → `{ "user": { "@id": "7" } }`); el contenido de texto junto a elementos hijos se almacena bajo `#text`. Los elementos hermanos repetidos con el mismo nombre se pliegan en un array JSON: dos nodos `<item>` se convierten en `"item": [ ... ]`, pero un único `<item>` permanece como objeto simple; esta es la conocida ambigüedad de "uno vs. varios", porque XML no puede distinguir una lista de un elemento de un valor escalar mientras que JSON trata `"item": {...}` y `"item": [{...}]` como formas distintas. Varias características de XML no tienen un equivalente limpio en JSON y son intencionalmente con pérdida. El orden de elementos lo preserva XML pero no está garantizado por el orden de claves de objetos JSON en todos los consumidores (aunque ES2015 especifica el orden de inserción para claves de cadena, esquemas como JSON Schema no lo restringen). El contenido mixto como `<p>Hola <b>mundo</b>!</p>` intercala texto con elementos y no puede hacer un ida-vuelta al modelo simple de clave-valor. Los namespaces XML en notación Clark (`{http://example.com/ns}user`) se reducen al nombre local `user`, que puede colisionar con un elemento sin namespace del mismo nombre. Los bloques CDATA como `<![CDATA[<raw>]]>` se desenvuelven en texto plano. Las instrucciones de procesamiento (`<?xml-stylesheet ...?>`), los comentarios (`<!-- ... -->`) y la declaración XML se descartan porque JSON no tiene sintaxis para ellos. La indentación se aplica mediante `JSON.stringify(value, null, indent)` con 2 espacios, 4 espacios o `'\t'`.

  • Parser: `new DOMParser().parseFromString(xml, 'application/xml')` según W3C DOM Level 3 Core; los errores se presentan como un elemento raíz `<parsererror>`, no como una excepción lanzada.
  • Convenciones de mapeo: `@attr` al estilo Badgerfish para atributos, `#text` para texto mixto, nombre local del elemento para hijos; Parker descarta atributos, Spark los mantiene en `$`.
  • Los hijos repetidos con el mismo nombre se pliegan en un array JSON; un único hijo permanece como objeto: la ambigüedad clásica de "uno vs. varios" no tiene solución del lado XML.
  • Características con pérdida: atributos (sin prefijo `@`), namespaces (`xmlns:foo`), instrucciones de procesamiento, comentarios, la declaración XML y envoltorios CDATA.
  • El contenido mixto (`<p>Hola <b>mundo</b>!</p>`) no puede hacer un ida-vuelta a JSON de clave-valor; el orden de elementos puede perderse en consumidores que no preservan el orden de claves.
  • La coerción a número/booleano es una elección deliberada: `<age>30</age>` puede convertirse en `30` (número) o `"30"` (cadena); los ceros a la izquierda (`007`) deben permanecer como cadenas.
  • El formato de salida usa `JSON.stringify(value, null, indent)` con indentación de 2 espacios, 4 espacios o `'\t'`; el resultado es UTF-8 sin BOM.

Ejemplos

Elemento simple

&lt;root>
  &lt;name>John&lt;/name>
&lt;/root>
→
{"root": {"name": "John"}}

Elementos repetidos

&lt;root>
  &lt;item>A&lt;/item>
  &lt;item>B&lt;/item>
&lt;/root>
→
{"root": {"item": ["A", "B"]}}

Estructura anidada

&lt;root>
  &lt;user>
    &lt;name>John&lt;/name>
    &lt;age>30&lt;/age>
  &lt;/user>
&lt;/root>
→
{"root": {"user": {"name": "John", "age": 30}}}

Preguntas frecuentes

¿Cómo se mapean los elementos XML a JSON?

Cada elemento se convierte en una propiedad JSON cuyo valor es el contenido del elemento (string u objeto anidado). Los elementos repetidos con el mismo nombre se convierten en arrays. Los atributos suelen llevar el prefijo '@' o se almacenan bajo una clave especial como '$'. La convención exacta varía y es configurable en la mayoría de páginas.

¿Por qué la conversión XML-a-JSON a veces pierde información?

XML distingue entre elementos, atributos, contenido textual, contenido mixto (texto y elementos), espacios de nombres, instrucciones de procesamiento y comentarios. JSON solo tiene objetos, arrays, strings, números, booleanos y null. Mapear el árbol más rico de XML sobre JSON pierde información sobre el orden y sobre la distinción entre elemento y atributo.

¿Cómo se gestionan los elementos con contenido mixto (texto + elementos hijos)?

El contenido mixto es complicado:

Hola mundo!

no tiene una representación JSON limpia. La página suele usar una clave especial (como '#text' o '$') para capturar el texto suelto, pero el orden entre texto y elementos no siempre se preserva. Evita el contenido mixto si planeas un ciclo de ida y vuelta.

¿Y los espacios de nombres XML?

Los elementos con prefijo (<ns:foo>) se convierten en claves de string 'ns:foo' o se separan en propiedades ns y de nombre local. Las declaraciones xmlns pueden conservarse como propiedades de tipo atributo o descartarse, según la configuración de la página.

¿Puedo recuperar XML idéntico a partir del JSON?

El ciclo de ida y vuelta no es sin pérdidas en general, sobre todo con contenido mixto, comentarios, instrucciones de procesamiento y orden de atributos. Para XML solo de datos (configuración, registros simples), el ciclo suele funcionar. Para XML de tipo documento (DocBook, HTML, RSS), usa un parser XML real.

¿Es lo mismo el elemento vacío <foo/> que <foo></foo>?

Sí, para el parser. Ambos producen una propiedad foo con un string vacío o valor null. La sintaxis autocerrada es puramente cosmética en XML.

¿La conversión es local?

Sí. El parseo de XML y la generación de JSON ocurren en tu navegador. La página no sube tus datos.