Convertir XML a JSON
Transforme un documento XML en un objeto JSON; los atributos y las etiquetas repetidas se conservan
Sus datos se quedan con usted. La conversión ocurre dentro del navegador; no se envía nada a ningún servidor.
¿Le sirvió esta herramienta?
Gracias, su comentario llegó.
Cómo funciona
Pegue el texto XML en el panel izquierdo; el resultado aparece a la derecha mientras escribe. La conversión sigue cuatro reglas. Los atributos entran en el objeto con una @ delante del nombre, para no chocar con una etiqueta hija que se llame igual. Una etiqueta que solo contiene texto se convierte directamente en ese texto; si además lleva un atributo o una etiqueta hija, el texto se guarda bajo la clave «#text». Las etiquetas que se repiten con el mismo nombre bajo el mismo padre se agrupan en una sola lista y conservan su orden. El contenido de las secciones CDATA se toma tal cual; los comentarios y la declaración <?xml?> se omiten. Si el documento está mal formado, el error indica en qué etiqueta y en qué línea se detuvo el análisis — etiqueta sin cerrar, cierre que no coincide y valor de atributo sin comillas se informan por separado. Puede copiar el resultado con un clic o descargarlo como archivo .json.
Esta herramienta también se busca como convertir xml a json, xml a json, xml to json, parsear xml online, leer archivo xml.
¿Qué es XML?
XML (Extensible Markup Language) es un formato de documento que marca los datos con etiquetas anidadas: cada dato vive entre una etiqueta de apertura y una de cierre, y la información extra se cuelga de las etiquetas como atributos. Se parece a HTML, pero su juego de etiquetas no es fijo — los nombres los elige quien describe los datos. Muchos sistemas de empresas y administraciones siguen apoyados en XML: la facturación electrónica, los servicios SOAP, los canales RSS, el interior de los archivos de ofimática y los archivos de configuración usan este formato. Para que un documento sea «bien formado» necesita una sola etiqueta raíz, cada etiqueta cerrada y los valores de atributo entre comillas.
¿Qué es CDATA?
Una sección CDATA es un bloque especial que le dice al analizador XML «trata todo lo de dentro como texto plano»; se escribe entre <![CDATA[ y ]]>. En condiciones normales, los caracteres < y & que aparecen en un texto se toman por el inicio de una etiqueta o de una entidad y rompen el documento; para evitarlo hay que escribir cada carácter como < o &, o meter el texto en una sección CDATA. Con un fragmento de código, un trozo de HTML o una nota libre llena de símbolos, CDATA mejora mucho la legibilidad. Esta herramienta toma el contenido CDATA tal cual, sin tocar los caracteres que contiene.
¿Cuál es la diferencia entre XML y JSON?
Los dos llevan datos en forma de texto, pero responden a preguntas distintas. XML es un lenguaje de marcado: envuelve los datos en etiquetas, puede colgar atributos de una misma etiqueta, mezclar texto y estructura, y responder de forma oficial — mediante un esquema XSD — a la pregunta «qué campos son obligatorios en este documento». Ese nivel de detalle importa en documentos con valor legal. JSON es una notación de estructuras de datos: objetos, listas, números, cadenas y booleanos, sin noción de atributo y más compacto. Los servicios web se pasaron a JSON por esa sencillez — casi cualquier lenguaje lo lee en una línea. La dificultad real de la conversión nace de esa asimetría: los atributos y las etiquetas repetidas de XML no tienen equivalente directo en JSON, y de ahí vienen reglas como el prefijo @ y el agrupado en listas.
Las reglas de conversión
El modelo de datos de XML y el de JSON no encajan uno a uno; por eso todo conversor debe declarar sus reglas. Estas son las que aplica esta herramienta:
- Atributo → clave «@nombre»: la etiqueta <producto codigo="ES-11"> da el campo «@codigo»
- Etiqueta con solo texto → cadena directa: <cliente>Ana</cliente> da el valor «Ana»
- Texto + atributo o etiqueta hija → el texto va bajo la clave «#text»
- Etiquetas hermanas repetidas con el mismo nombre → lista; el orden del documento se conserva
- Etiqueta vacía (<nota/>) → cadena vacía
- El contenido CDATA se toma tal cual; comentarios y declaración <?xml?> se omiten
¿Objeto suelto o lista? La trampa que conviene conocer
La decisión depende de cuántas veces se repite la etiqueta en el documento: si aparece dos veces se convierte en lista, si aparece una vez se convierte en objeto. El propio XML no lleva ninguna marca que diga «esto es siempre una lista»; esa información solo vive en el esquema (XSD), que aquí no se lee.
La consecuencia práctica: dos documentos con la misma estructura pueden producir JSON distintos. Un pedido con un solo producto da un objeto; con dos productos, una lista. Si su código lee ese campo, compruebe si es una lista — es el error más frecuente en los sistemas que pasan de XML a JSON.
Límites del alcance: namespace, DTD y entidades
Esta herramienta usa un analizador pequeño, escrito a mano, que corre dentro del navegador. Su alcance es estrecho a propósito y sus límites están escritos aquí, sin letra pequeña:
- Los espacios de nombres (namespace) no se resuelven: «ns:etiqueta» se convierte en la clave «ns:etiqueta», con prefijo incluido, y los atributos xmlns se tratan como atributos normales
- La DTD y la declaración <!DOCTYPE> se omiten; las entidades definidas allí no se expanden
- Solo se resuelven & < > " ' y las referencias numéricas &#NNN; y &#xNN;; una entidad desconocida queda tal cual en el texto
- No hay validación de esquema (XSD): solo se comprueba que el documento esté bien formado
¿Por qué la expansión de entidades está apagada?
Las entidades definidas en una DTD pueden llamarse entre sí. Diez líneas de definiciones pueden expandirse a gigabytes de texto: es el ataque clásico conocido como «bomba de entidades» o «billion laughs», que agota la memoria. Un analizador que expande entidades se congela al intentar procesar un documento así.
Como la conversión corre en su dispositivo, el precio lo pagaría usted. Por eso la resolución de entidades se limita a cinco abreviaturas conocidas y a las referencias numéricas; no se procesa ninguna definición que lea una fuente externa o se expanda de forma recursiva.
Preguntas frecuentes
¿Por qué los atributos empiezan con @?
En XML una etiqueta puede tener a la vez un atributo «codigo» y una etiqueta hija «codigo»; en JSON los dos caerían en la misma clave y uno se perdería. La @ delante del nombre del atributo evita ese choque. Es una convención muy asentada en las conversiones de XML a JSON.
¿Por qué el mismo XML da a veces un objeto y a veces una lista?
No cambia la estructura, cambian los datos: una etiqueta que aparece una sola vez se convierte en objeto; con dos o más apariciones, en lista. Si un campo debe ser siempre una lista, haga esa comprobación en el código que lee el resultado.
¿Funcionan las etiquetas con prefijo (ns:etiqueta)?
Se leen y se convierten, pero el espacio de nombres no se resuelve: el prefijo queda dentro de la clave, así que «ns:etiqueta» se escribe también «ns:etiqueta» en JSON. Los atributos xmlns tampoco se borran; aparecen como campos «@xmlns».
¿El XML que pego se envía a algún sitio?
No. El análisis y la conversión se hacen por completo dentro de su navegador; aunque pegue una factura, un pedido o un archivo de configuración, nada sale de esta página.