ToolDeck

XML a JSON

Convierte XML a formato JSON

Prueba un ejemplo

Entrada XML

Salida JSON

Se ejecuta localmente · Es seguro pegar secretos
El JSON aparecerá aquí…

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

La conversión de XML a JSON es el proceso de transformar datos del Lenguaje de Marcado Extensible (XML) a la Notación de Objetos de JavaScript (JSON). Ambos formatos representan datos estructurados y jerárquicos, pero utilizan sintaxis y modelos de datos distintos. XML usa etiquetas de apertura y cierre con atributos opcionales, mientras que JSON usa pares clave-valor, matrices y tipos primitivos. Convertir XML a JSON te permite trabajar con datos XML en entornos donde JSON es el formato nativo, como los runtimes de JavaScript, las APIs REST y las bases de datos NoSQL.

La conversión no siempre es uno a uno. XML tiene construcciones sin equivalente directo en JSON: atributos, contenido mixto (texto entremezclado con elementos hijo), instrucciones de procesamiento, comentarios, secciones CDATA y declaraciones de espacio de nombres. Las distintas bibliotecas de conversión gestionan estas construcciones de manera diferente, lo que explica la existencia de múltiples convenciones. El enfoque más habitual añade el prefijo @ a los nombres de atributos y coloca el contenido de texto en un campo #text cuando hay atributos presentes en el mismo elemento.

La conversión de XML a JSON es un paso habitual al migrar de SOAP a REST, al consumir APIs empresariales heredadas, o al procesar feeds de datos gubernamentales y financieros que exigen XML. En lugar de reescribir productores y consumidores simultáneamente, los equipos convierten el payload XML en la capa de frontera y pasan JSON hacia abajo. AWS API Gateway, Apache Camel y MuleSoft soportan este patrón de forma nativa.

XML input
<bookstore>
  <book category="fiction">
    <title lang="en">The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <year>1925</year>
    <price>10.99</price>
  </book>
  <book category="non-fiction">
    <title lang="en">Sapiens</title>
    <author>Yuval Noah Harari</author>
    <year>2011</year>
    <price>14.99</price>
  </book>
</bookstore>
JSON output
{
  "bookstore": {
    "book": [
      {
        "@category": "fiction",
        "title": {
          "@lang": "en",
          "#text": "The Great Gatsby"
        },
        "author": "F. Scott Fitzgerald",
        "year": "1925",
        "price": "10.99"
      },
      {
        "@category": "non-fiction",
        "title": {
          "@lang": "en",
          "#text": "Sapiens"
        },
        "author": "Yuval Noah Harari",
        "year": "2011",
        "price": "14.99"
      }
    ]
  }
}

¿Por qué usar un conversor de XML a JSON online?

Escribir un script de conversión puntual lleva tiempo, especialmente cuando el XML contiene atributos, espacios de nombres o elementos repetidos que deben convertirse en matrices JSON. Un conversor en el navegador te da el resultado en segundos para que puedas inspeccionar la estructura y continuar.

Conversión instantánea
Pega XML y obtén la salida JSON de inmediato. Sin necesidad de instalar una biblioteca, escribir un script ni configurar una herramienta de compilación.
🔒
Procesamiento con privacidad primero
La conversión completa se ejecuta en tu navegador mediante JavaScript. Tus datos XML nunca abandonan tu máquina y nunca se suben a ningún servidor.
🔀
Gestión de atributos y matrices
Los atributos se asignan a claves con prefijo @. Los elementos hermanos repetidos se agrupan automáticamente en matrices JSON, siguiendo la convención Parker o BadgerFish.
📋
Sin cuenta requerida
Abre la página, pega tu XML y copia el resultado JSON. Sin registro, sin clave de API, sin límites de uso.

Casos de uso de XML a JSON

Desarrollo frontend
Convierte respuestas de APIs XML a JSON para renderizar datos en componentes de React, Vue o Angular sin añadir una biblioteca de análisis XML al bundle del cliente.
Ingeniería backend
Transforma payloads SOAP, feeds RSS/Atom o respuestas XML-RPC en JSON en la capa del API gateway antes de pasar los datos a microservicios que esperan entrada JSON.
DevOps y CI/CD
Convierte informes de pruebas XML (JUnit, NUnit, xUnit) a JSON para su ingestión por dashboards, bots de Slack o pipelines personalizados de notificaciones de CI.
QA y pruebas
Compara snapshots JSON convertidos con la salida esperada para verificar que un servicio que produce XML no ha cambiado su estructura de respuesta entre versiones.
Ingeniería de datos
Convierte exportaciones XML de portales gubernamentales, feeds financieros (FIX, FIXML) o sistemas sanitarios (HL7 CDA) a JSON para cargarlos en BigQuery, Snowflake o Elasticsearch.
Aprendizaje de formatos de datos
Los estudiantes que estudian el intercambio de datos pueden pegar muestras XML en el conversor para ver exactamente cómo los elementos, atributos y el anidamiento se corresponden con claves, objetos y matrices JSON.

Referencia de correspondencia XML a JSON

XML y JSON tienen modelos de datos distintos. La tabla siguiente muestra cómo se corresponde cada construcción XML con su equivalente JSON bajo la convención más común (@ para atributos, #text para texto junto a atributos). Algunas construcciones, como el contenido mixto y los comentarios, no tienen representación JSON estándar.

Construcción XMLEjemplo XMLEquivalente JSON
Element<name>text</name>"name": "text"
Nested elements<a><b>1</b></a>"a": { "b": "1" }
Attributes<el attr="v"/>"el": { "@attr": "v" }
Text + attributes<el a="1">text</el>"el": { "@a": "1", "#text": "text" }
Repeated elements<r><i>1</i><i>2</i></r>"r": { "i": ["1", "2"] }
Mixed content<p>A <b>B</b> C</p>Varies by convention
CDATA<![CDATA[raw]]>"#cdata": "raw" or flattened
Namespacesxmlns:prefix="uri"Prefix preserved or stripped
Empty element<el/>"el": null or ""
Comments<!-- note -->Discarded (no JSON equivalent)

Convenciones de XML a JSON comparadas

No existe un estándar único que rija la correspondencia de XML a JSON. Se usan ampliamente tres convenciones, cada una con diferentes ventajas e inconvenientes en cuanto al tratamiento de atributos, la detección de matrices y la preservación del texto.

BadgerFish
Cada nodo de texto va a una clave $. Los atributos reciben claves con prefijo @. Los espacios de nombres se preservan como entradas @xmlns. Detallado pero sin pérdida: puedes hacer un round-trip de vuelta a XML sin perder datos.
Parker
Elimina completamente los atributos y convierte los elementos de solo texto en valores directos. Los elementos repetidos se convierten en matrices. Compacto y limpio, pero destructivo: los atributos y la información de espacio de nombres se descartan.
GData (Google Data)
Usa $t para el contenido de texto y preserva los atributos como claves de nivel superior sin prefijo. Un término medio entre la verbosidad de BadgerFish y la simplicidad de Parker. Usado históricamente en las APIs de Google.

Ejemplos de código

A continuación hay ejemplos funcionales para convertir XML a JSON en JavaScript, Python, Go y la línea de comandos. Cada ejemplo gestiona elementos anidados y etiquetas hermanas repetidas.

JavaScript (browser)
// Using the DOMParser API to walk XML and build a JSON object
function xmlToJson(xml) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xml, 'application/xml')

  function nodeToObj(node) {
    const obj = {}
    // Handle attributes
    if (node.attributes) {
      for (const attr of node.attributes) {
        obj['@' + attr.name] = attr.value
      }
    }
    // Handle child nodes
    for (const child of node.childNodes) {
      if (child.nodeType === 3) { // text
        const text = child.textContent.trim()
        if (text) obj['#text'] = text
      } else if (child.nodeType === 1) { // element
        const key = child.nodeName
        const val = nodeToObj(child)
        if (obj[key]) {
          if (!Array.isArray(obj[key])) obj[key] = [obj[key]]
          obj[key].push(val)
        } else {
          obj[key] = val
        }
      }
    }
    // Simplify text-only nodes
    const keys = Object.keys(obj)
    if (keys.length === 1 && keys[0] === '#text') return obj['#text']
    return obj
  }

  return nodeToObj(doc.documentElement)
}

const xml = '<user><name>Alice</name><role>admin</role></user>'
console.log(JSON.stringify(xmlToJson(xml), null, 2))
// → { "name": "Alice", "role": "admin" }
Python
import xmltodict
import json

xml = """
<user>
  <name>Alice</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>
"""

# xmltodict converts XML to an OrderedDict
result = xmltodict.parse(xml)
print(json.dumps(result, indent=2))
# → {
# →   "user": {
# →     "name": "Alice",
# →     "roles": { "role": ["admin", "editor"] }
# →   }
# → }

# With the standard library (xml.etree.ElementTree)
import xml.etree.ElementTree as ET

def etree_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"@{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        child_data = etree_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(child_data)
        else:
            d[child.tag] = child_data
    if elem.text and elem.text.strip():
        if d:
            d["#text"] = elem.text.strip()
        else:
            return elem.text.strip()
    return d

root = ET.fromstring(xml)
print(json.dumps(etree_to_dict(root), indent=2))
Go
package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
    "strings"
)

// For simple, known schemas — define a struct
type User struct {
    XMLName xml.Name `xml:"user"`
    Name    string   `xml:"name"`
    Roles   []string `xml:"roles>role"`
}

func main() {
    data := `<user><name>Alice</name><roles><role>admin</role><role>editor</role></roles></user>`
    var user User
    xml.NewDecoder(strings.NewReader(data)).Decode(&user)

    out, _ := json.MarshalIndent(user, "", "  ")
    fmt.Println(string(out))
    // → { "Name": "Alice", "Roles": ["admin", "editor"] }
}
CLI (xmllint + jq / yq)
# Using xq (part of yq, a jq wrapper for XML)
# Install: pip install yq  OR  brew install yq
echo '<user><name>Alice</name></user>' | xq .
# → { "user": { "name": "Alice" } }

# Using xmlstarlet + jq
xmlstarlet sel -t -v '//name' input.xml | jq -R '{ name: . }'

# Node.js one-liner with xml2js
echo '<a><b>1</b></a>' | node -e "
  const {parseString} = require('xml2js');
  let d=''; process.stdin.on('data',c=>d+=c);
  process.stdin.on('end',()=>parseString(d,(e,r)=>console.log(JSON.stringify(r,null,2))))
"

Preguntas frecuentes

¿La conversión de XML a JSON es sin pérdida?
No siempre. Los atributos XML, comentarios, instrucciones de procesamiento y declaraciones de espacio de nombres no tienen equivalente directo en JSON. La mayoría de los conversores preservan los atributos usando la convención de prefijo @, pero los comentarios e instrucciones de procesamiento se descartan. Si necesitas un round-trip totalmente reversible, usa una convención sin pérdida como BadgerFish.
¿Cómo se representan los atributos XML en JSON?
xmlToJsonContent.a2
¿Cómo gestiona el conversor los elementos XML repetidos?
xmlToJsonContent.a3
¿Puedo convertir JSON de vuelta a XML?
Sí, pero el resultado depende de la convención usada durante la conversión original. Si los atributos se preservaron con prefijos @, un conversor JSON a XML puede reconstruirlos. Si la conversión original usó Parker (que descarta atributos), esa información se ha perdido. ToolDeck también tiene una herramienta JSON a XML para la dirección inversa.
¿Qué ocurre con los espacios de nombres XML durante la conversión?
El tratamiento de los espacios de nombres varía según la biblioteca. Algunos conversores preservan el prefijo en el nombre de la clave (p. ej., "ns:element"), otros asignan las declaraciones xmlns a campos separados, y algunos los eliminan por completo. Comprueba la salida de tu XML específico para verificar el comportamiento con los espacios de nombres.
¿Existe un estándar para la conversión de XML a JSON?
No existe ningún estándar formal del W3C ni del IETF. Las referencias más cercanas son la convención BadgerFish, la convención Parker y el mapeo XSLT-to-JSON de OASIS. En la práctica, cada biblioteca implementa sus propias reglas, lo que explica que el mismo XML pueda producir JSON ligeramente diferente en distintas herramientas.
¿Cómo gestiono archivos XML grandes?
Los conversores en el navegador funcionan bien para archivos de hasta unos pocos megabytes. Para archivos más grandes (10 MB o más), usa un analizador en streaming como iterparse de Python (xml.etree.ElementTree) o xml-stream de Node.js. Estos procesan el documento de forma incremental sin cargar el árbol completo en memoria.