Skip to content

Conversor JSON a XML

Pega JSON, obtén XML al instante. Convierte objetos, arrays y atributos @_ en el navegador — nada se sube. Gratis, privado, sin registro.

Sin rastreo Se ejecuta en el navegador Gratis
Opciones · 2 espacios · JSON → XML
Sangría
0 caracteres
XML Salida
0 líneas
Revisado para conformidad XML 1.0, corrección de la convención @_/#text y precisión en la normalización de la raíz — Go Tools Engineering Team · May 29, 2026

¿Qué es la conversión de JSON a XML y cómo funciona?

JSON (JavaScript Object Notation) y XML (Extensible Markup Language) son ambos formatos de datos estructurados, pero tienen modelos fundamentalmente diferentes: JSON es un árbol de objetos, arrays, cadenas, números, booleanos y valores nulos sin concepto de atributos ni restricciones de raíz del documento; XML es un árbol de elementos que pueden llevar atributos y contenido de texto, y el documento debe tener exactamente un elemento raíz. Convertir de JSON a XML requiere un conjunto de convenciones para tender un puente sobre esta incompatibilidad.

Esta herramienta usa la convención más ampliamente adoptada — la misma que usan fast-xml-parser (Node.js), xmltodict (Python) y JAXB (Java) — aplicada a la inversa:

**1. Normalización del elemento raíz.** La diferencia más importante entre JSON y XML es la restricción de la raíz. JSON no tiene concepto de raíz; XML requiere exactamente una. El conversor gestiona cuatro casos automáticamente. Un objeto de una sola clave usa esa clave como raíz XML: { "config": {...} } → .... Un objeto con múltiples claves se envuelve en : { "a": 1, "b": 2 } → 12. Un array de nivel superior se envuelve como .... Un valor primitivo se envuelve como value.

**2. Prefijo @_ → atributos XML.** Las claves JSON con prefijo @_ se convierten en atributos XML del elemento que las contiene. { "element": { "@_id": "42", "@_class": "primary" } } produce . Este prefijo es la convención canónica — ningún nombre de elemento XML válido comienza con @, por lo que nunca hay colisión con los nombres de elementos hijos.

**3. #text → contenido de texto del elemento.** Cuando un elemento necesita tanto atributos como contenido de texto, el texto se almacena bajo la clave #text: { "price": { "@_currency": "USD", "#text": "29.99" } } → 29.99. Los elementos con solo contenido de texto (sin claves @_) se convierten en elementos de texto simples sin esta indirección.

**4. Arrays → elementos hermanos repetidos con el mismo nombre.** XML permite múltiples elementos hijos con el mismo nombre; JSON usa arrays para listas ordenadas. Un array JSON bajo una clave produce elementos hijos repetidos que reutilizan el nombre de la clave: { "items": ["a", "b"] } produce ab (los dos elementos son hermanos bajo el padre). Cuando toda la entrada JSON es un array de nivel superior, se añade un envoltorio y cada elemento se convierte en un hijo es un nombre alternativo fijo usado solo en ese caso.

**5. Simétrico con XML a JSON.** Las convenciones @_ y #text usadas aquí son exactamente las mismas que usa el Conversor XML a JSON complementario. Esto significa que una ida y vuelta JSON → XML → JSON preserva los atributos, el contenido de texto y la estructura de elementos — siempre que el JSON de entrada siga las convenciones @_/#text.

**¿Cuándo convertir JSON a XML?** Los escenarios más comunes son: (1) enviar datos a un servicio web SOAP o basado en XML heredado que requiere un cuerpo de solicitud XML; (2) generar archivos de configuración XML (Spring, Maven, Ant, recursos de Android) a partir de datos JSON; (3) producir XML de sitemap.xml o feed RSS a partir de datos de contenido JSON; (4) interoperar con sistemas empresariales (ERP, CRM, EDI) que consumen XML; (5) generar SVG u otros formatos gráficos basados en XML de forma programática a partir de datos JSON. Para formatear y validar el XML resultante, usa el Formateador XML.

// Convert JSON to XML in Node.js using fast-xml-parser
import { XMLBuilder } from 'fast-xml-parser';

const data = {
  catalog: {
    product: {
      '@_id': 'P01',
      '@_category': 'electronics',
      name: 'Wireless Headphones',
      price: {
        '@_currency': 'USD',
        '#text': '79.99'
      }
    }
  }
};

const builder = new XMLBuilder({
  attributeNamePrefix: '@_',   // @_ keys become XML attributes
  textNodeName: '#text',       // #text key becomes element text content
  ignoreAttributes: false,     // process @_ attribute keys
  format: true,                // pretty-print with indentation
  indentBy: '  ',              // 2-space indent
});

const xml = builder.build(data);
console.log(xml);
// <catalog>
//   <product id="P01" category="electronics">
//     <name>Wireless Headphones</name>
//     <price currency="USD">79.99</price>
//   </product>
// </catalog>

Características principales

Conversión en vivo

La salida XML se actualiza al instante mientras escribes o pegas JSON — no se necesita botón Convertir. Las entradas grandes (>200 KB) cambian automáticamente al modo manual para mantener el navegador con capacidad de respuesta.

Normalización automática de la raíz

XML requiere exactamente un elemento raíz. Los objetos de una sola clave usan su clave como raíz; los objetos con múltiples claves se envuelven en ; los arrays de nivel superior se convierten en ...; los primitivos se convierten en value — siempre produce XML válido.

Convención de atributos @_ y #text

Las claves con prefijo @_ se convierten en atributos XML; la clave #text se convierte en contenido de texto del elemento. Esto coincide con la convención de fast-xml-parser y xmltodict, haciendo la salida simétrica con el Conversor XML a JSON complementario.

Array a elementos repetidos

Los arrays JSON bajo una clave producen elementos hijos repetidos que reutilizan el nombre de la clave — sin singularización. { "items": [1, 2, 3] } produce tres elementos hermanos . Un array de nivel superior como entrada se envuelve como ... usando como nombre literal fijo.

Privacidad 100% en el navegador

Toda la conversión se ejecuta localmente en tu navegador usando JavaScript. Tu JSON — incluidas credenciales, configuraciones internas y cargas sensibles — nunca se envía a ningún servidor, nunca se registra y nunca se almacena.

Ida y vuelta simétrica con XML a JSON

Las convenciones @_ y #text son compartidas con el Conversor XML a JSON complementario. Una ida y vuelta JSON → XML → JSON preserva fielmente los atributos, el contenido de texto y la estructura anidada.

Ejemplos

Objeto de respuesta de API

{"user":{"id":42,"name":"Alice Kim","email":"alice@example.com","role":"admin","address":{"city":"Seoul","country":"KR"}}}

Un objeto JSON con una única clave cuyo nivel superior se convierte en el elemento raíz XML. El objeto address anidado produce un elemento hijo

con hijos y . Como el objeto exterior tiene exactamente una clave ("user"), no se añade ningún envoltorio — "user" en sí mismo es la raíz. Los números como 42 se convierten en contenido de texto verbatim: 42.

Array de nivel superior

[{"id":1,"name":"Widget A","price":9.99},{"id":2,"name":"Widget B","price":14.99},{"id":3,"name":"Widget C","price":4.49}]

Cuando toda la entrada es un array JSON (no envuelto en un objeto), el conversor produce .... Cada elemento del array se convierte en un hijo — "item" es un nombre literal fijo usado exclusivamente para arrays de nivel superior. Este es el único caso donde aparece ; los arrays bajo una clave de objeto reutilizan el nombre de esa clave para cada elemento.

Objeto con atributos y contenido de texto

{"catalog":{"product":{"@_id":"P01","@_category":"electronics","name":"Wireless Headphones","price":{"@_currency":"USD","#text":"79.99"}}}}

Las claves con prefijo @_ se convierten en atributos XML del elemento: @_id se convierte en id="P01" y @_category en category="electronics" en el elemento . La clave #text se convierte en el contenido de texto del elemento — así el objeto price produce 79.99. Esto hace una ida y vuelta limpia con el conversor XML a JSON, que usa las mismas convenciones @_ y #text.

Cómo usar

  1. 1

    Pega tu JSON

    Introduce o pega tus datos JSON en el campo de entrada de arriba. También puedes hacer clic en 'Cargar ejemplo' para probar un ejemplo — un objeto de respuesta de API, una carga de array o un objeto que usa atributos @_ y #text.

  2. 2

    Ve la salida XML en vivo

    El XML aparece instantáneamente en el panel de salida. Los objetos de una sola clave usan su clave como raíz; los objetos con múltiples claves se envuelven en ; las claves con prefijo @_ se convierten en atributos; los arrays se convierten en elementos hijos repetidos. Ajusta la sangría (2 o 4 espacios) según necesites.

  3. 3

    Copia o descarga

    Haz clic en Copiar para llevar el XML al portapapeles, o en Descargar para guardarlo como archivo .xml. Para validar o reformatear el resultado, pégalo en el Formateador XML.

Errores comunes de conversión

El objeto con múltiples claves obtiene un envoltorio inesperado

Si tu JSON de nivel superior tiene múltiples claves, la salida las envuelve todas en . Esto es XML correcto (que requiere una única raíz), pero puede no coincidir con tu esquema de destino. Reshapeea tu JSON a un objeto de una sola clave para controlar el nombre del elemento raíz.

✗ Incorrecto
// Input: { "status": 200, "data": { "id": 1 } }
// Output: <root><status>200</status><data><id>1</id></data></root>
// Root is <root> — may not match your schema
✓ Correcto
// Wrap in a named key to control the root element
// Input: { "response": { "status": 200, "data": { "id": 1 } } }
// Output: <response><status>200</status><data><id>1</id></data></response>

El array de nivel superior obtiene un envoltorio

Un array JSON de nivel superior no tiene nombre de elemento, por lo que se envuelve como .... Si quieres nombres de etiqueta con significado, envuelve primero el array en un objeto con nombre.

✗ Incorrecto
// Input: [{ "id": 1 }, { "id": 2 }]
// Output: <root><item><id>1</id></item><item><id>2</id></item></root>
// Tag names are generic
✓ Correcto
// Wrap in a named key for meaningful tag names
// Input: { "products": [{ "id": 1 }, { "id": 2 }] }
// Output: <root><products><id>1</id></products><products><id>2</id></products></root>
// Each array element reuses the key name "products" as its tag

Claves de atributo sin el prefijo @_

Para producir un atributo XML, la clave JSON debe tener el prefijo @_. Sin el prefijo, la clave se trata como un elemento hijo, no como un atributo.

✗ Incorrecto
// Input: { "tag": { "id": "42", "name": "Alice" } }
// Output: <tag><id>42</id><name>Alice</name></tag>  ← id is a child element
✓ Correcto
// Use @_ prefix for attributes
// Input: { "tag": { "@_id": "42", "name": "Alice" } }
// Output: <tag id="42"><name>Alice</name></tag>  ← id is an attribute

Elemento con atributos y texto — falta #text

Si quieres que un elemento tenga tanto atributos XML como contenido de texto, debes usar la clave #text para el texto. Sin ella, el texto no tiene dónde ir y el elemento estará vacío o producirá un error.

✗ Incorrecto
// Input: { "price": { "@_currency": "USD", "value": "29.99" } }
// Output: <price currency="USD"><value>29.99</value></price>
// Text is a child element, not text content
✓ Correcto
// Use #text for element text content
// Input: { "price": { "@_currency": "USD", "#text": "29.99" } }
// Output: <price currency="USD">29.99</price>  ← text content

Claves JSON con caracteres no válidos para XML

Los nombres de elementos XML no pueden comenzar con un dígito ni contener espacios, dos puntos (excepto para prefijos de espacio de nombres) ni la mayoría de los caracteres especiales. Si tus claves JSON contienen estos caracteres, el XML de salida estará malformado. Renombra las claves problemáticas antes de convertir, o saneálas en un paso de postprocesamiento.

✗ Incorrecto
// JSON key starts with digit — invalid XML element name
// Input: { "1stItem": "value" }
// Output: <1stItem>value</1stItem>  ← invalid XML
✓ Correcto
// Use a valid XML element name
// Input: { "firstItem": "value" }
// Output: <firstItem>value</firstItem>  ← valid XML

Caracteres especiales en los valores sin escapar

El contenido de texto XML no debe contener los caracteres crudos <, >, &, ni " — deben escaparse como <, >, & y ". El conversor escapa automáticamente estos caracteres en el contenido de texto del elemento y los valores de atributos. Si el procesamiento posterior los escapa doble, verifica que tu parser XML esté consumiendo bytes XML crudos en lugar de reescapar contenido ya escapado.

✗ Incorrecto
// JSON: { "query": "name = 'Alice' & role = 'admin'" }
// Converter outputs: <query>name = 'Alice' &amp; role = 'admin'</query>
// If double-processed: &amp;amp; — consumer is re-escaping
✓ Correcto
// Converter output is correct — consume it as XML, not as a raw string
// <query>name = 'Alice' &amp; role = 'admin'</query>
// XML parser decodes to: name = 'Alice' & role = 'admin'

Casos de uso comunes

Llamar a servicios web SOAP y XML heredados
Construye la carga JSON en tu aplicación, conviértela a XML y envíala mediante POST al endpoint SOAP. Esto evita construir cadenas XML a mano y te permite trabajar con los datos en una estructura JSON nativa hasta el momento en que necesitas serializarlos para el servicio heredado.
Generar archivos de configuración XML
Spring, Maven, Ant, Tomcat y Android usan todos formatos de configuración XML. Genera o transforma los datos de configuración como JSON — más fácil de comparar y controlar versiones — y luego convierte a XML para el despliegue.
Producir XML de Sitemap y feed RSS
Los sistemas de gestión de contenido y los generadores de sitios estáticos a menudo almacenan los metadatos de páginas como JSON. Convierte esos metadatos a XML de sitemap.xml o feed RSS para enviarlos a los motores de búsqueda o sindicar el contenido a los lectores de feeds.
Integración de datos empresariales (EDI / ERP / CRM)
Los sistemas ERP (SAP, Oracle), las plataformas CRM y las redes EDI comúnmente intercambian datos en XML. Convierte las exportaciones JSON de APIs REST modernas a XML para alimentar estos sistemas sin construir un serializador XML personalizado.
Archivos de recursos de Android
Los recursos de cadenas de Android, las restricciones de diseño y las entradas del manifiesto son todos XML. Genera o actualiza archivos de recursos de forma programática a partir de fuentes de datos JSON y conviértelos al formato XML requerido por el sistema de compilación de Android.
Generación de SVG y gráficos vectoriales
SVG es XML. Construye la estructura SVG como datos JSON — paths, formas, colores, transformaciones — y luego conviértela a XML para producir archivos SVG válidos para la web, impresión o herramientas de edición vectorial.

Detalles técnicos

Análisis JSON conforme a RFC 8259
La entrada JSON se analiza usando el JSON.parse() nativo del navegador, que es completamente conforme a RFC 8259. Proporciona mensajes de error de sintaxis precisos con información de posición del mejor esfuerzo (línea y columna) y gestiona todos los tipos de datos JSON: cadenas, números, booleanos, null, arrays y objetos.
Serializador recursivo personalizado de JSON a XML
Tras el análisis, un serializador recursivo personalizado recorre el árbol JSON. Las claves de objeto que comienzan con @_ se emiten como atributos XML en el elemento padre. La clave #text se emite como el contenido de texto del elemento. Las claves de objeto simples se convierten en elementos hijos. Los valores de array producen elementos hermanos repetidos con el mismo nombre. Los caracteres especiales (<, >, &, ", ') en el contenido de texto y los valores de atributos se escapan a sus referencias de entidad XML.
Normalización de la raíz
Dado que XML requiere exactamente un elemento raíz, el serializador aplica la normalización de la raíz antes de construir el documento: los objetos de una sola clave usan la clave como raíz; los objetos con múltiples claves y los arrays de nivel superior reciben un envoltorio sintético. Esto garantiza que la salida sea siempre XML bien formado independientemente de la forma de la entrada.
100% basado en el navegador — Sin carga, sin servidor
Todo el procesamiento se ejecuta en el motor JavaScript de tu navegador. No se transmiten datos por la red en ningún momento. Las entradas mayores de 200 KB cambian automáticamente del modo en vivo al modo manual (requiriendo un clic explícito en Convertir) para mantener el navegador con capacidad de respuesta durante la serialización intensiva.

Buenas prácticas

Controla el elemento raíz con un objeto de una sola clave
La forma más limpia de producir XML con significado es asegurarse de que tu JSON de nivel superior sea un objeto de una sola clave cuya clave sea el nombre del elemento raíz deseado. Envolver los datos con múltiples claves bajo una clave con nombre te proporciona una raíz semánticamente significativa en lugar del genérico envoltorio .
Usa @_ y #text para XML con muchos atributos
Si tu esquema XML de destino usa muchos atributos (común en archivos de configuración, SVG y envelopes SOAP), reshapeea tu JSON para usar claves con prefijo @_ y #text antes de convertir. El XML resultante coincidirá exactamente con el esquema de destino sin postprocesamiento.
Envuelve los arrays en objetos con nombre para nombres de etiqueta con significado
Un array de nivel superior produce el patrón genérico ..., donde es un nombre literal fijo. Envolver el array bajo una clave con nombre — { "products": [...] } — produce elementos repetidos (el nombre de la clave se reutiliza para cada elemento del array) bajo un envoltorio . Esto te proporciona un nombre de etiqueta con significado de dominio y es casi siempre preferible para XML que será analizado o validado por un esquema.
Valida la salida con el Formateador XML
Después de convertir, pega la salida XML en el Formateador XML para validar la conformidad, comprobar la sangría e identificar cualquier problema estructural antes de enviar el XML a un servicio posterior o confirmarlo en el control de versiones.
Sanea las claves JSON antes de convertir
Los nombres de elementos XML deben comenzar con una letra o guión bajo y no pueden contener espacios ni la mayoría de los caracteres especiales. Si tus claves JSON provienen de una fuente externa (un nombre de columna de base de datos, un nombre de campo de API o entrada del usuario), audítalas para verificar la validez del nombre XML antes de convertir para evitar una salida malformada.

Preguntas frecuentes

¿Se envían mis datos JSON a un servidor cuando uso esta herramienta?
No. Toda la conversión ocurre completamente dentro de tu navegador usando JavaScript. Tu JSON nunca se transmite por la red, nunca se almacena en ningún servidor y nunca es registrado ni analizado. Esto hace que la herramienta sea segura para usar con cargas JSON que contengan credenciales de API, configuración de bases de datos, datos internos de servicios o cualquier otro contenido sensible. Puedes verificarlo abriendo la pestaña Red de tu navegador — verás cero solicitudes al pegar o convertir JSON.
¿Cómo decide la herramienta cuál es el elemento raíz XML?
XML requiere exactamente un elemento raíz; JSON no tiene tal restricción. El conversor aplica estas reglas: (1) Un objeto de una sola clave usa esa clave como nombre del elemento raíz — { "user": { ... } } se convierte en .... (2) Un objeto con múltiples claves (dos o más claves en el nivel superior) se envuelve en un elemento para que todas las claves se conviertan en hijos de una sola raíz. (3) Un array de nivel superior se envuelve como ..., con cada elemento del array convirtiéndose en un hijo . (4) Un valor primitivo (cadena, número, booleano, null) en el nivel superior se convierte en value. Estas reglas garantizan que la salida sea siempre XML bien formado con exactamente una raíz.
¿Por qué un objeto JSON con múltiples claves se envuelve en ?
XML es un formato de documento con el estricto requisito de una sola raíz — un documento XML válido debe tener exactamente un elemento de nivel superior. Los objetos JSON pueden tener cualquier número de claves de nivel superior, por lo que cuando tu JSON tiene múltiples claves de nivel superior (como { "status": 200, "data": {...}, "meta": {...} }), no hay una sola clave para usar como raíz. Envolver en es la convención más segura y predecible. Si quieres un nombre de elemento raíz diferente, reshapeea tu JSON a un objeto de una sola clave antes de convertir — p. ej. { "response": { "status": 200, "data": {...} } }.
¿Cómo se convierte un array JSON de nivel superior a XML?
Un array de nivel superior se envuelve como ....... Cada elemento del array se convierte en un hijo — "item" es un nombre literal fijo usado solo para arrays de nivel superior. Esto es diferente de los arrays anidados bajo una clave de objeto: si escribes { "products": [...] }, cada elemento del array se convierte en un hijo (reutilizando el nombre de la clave), no en . Si quieres nombres de etiqueta personalizados para un array de nivel superior, envuélvelo primero en un objeto con nombre: { "products": [...] } te dará elementos repetidos.
¿Cómo convierto claves JSON en atributos XML?
Prefija la clave con @_ y el conversor la emitirá como atributo XML en lugar de elemento hijo. Por ejemplo, { "tag": { "@_id": "42", "@_lang": "en", "#text": "Hello" } } produce Hello. La convención del prefijo @_ es la misma que usan fast-xml-parser (Node.js) y xmltodict (Python), haciendo que la salida haga una ida y vuelta consistentemente con esas librerías. Esta es también la convención usada por el Conversor XML a JSON complementario.
¿Para qué sirve la clave #text?
Cuando un elemento necesita tanto atributos XML como contenido de texto, no puedes simplemente mapear el texto a un elemento hijo — debe ser el propio nodo de texto del elemento. La clave #text en tu JSON se convierte en ese contenido de texto. Ejemplo: { "price": { "@_currency": "USD", "#text": "29.99" } } produce 29.99. Si un objeto tiene solo la clave #text y ninguna clave @_, igualmente produce un elemento de texto simple: { "note": { "#text": "hello" } } se convierte en hello.
¿La sangría afecta a la estructura XML?
No. La sangría es puramente estética — cambia cómo se formatea el XML para la legibilidad humana pero no afecta a la estructura de elementos, los valores de atributos ni el contenido de texto. Elige 2 espacios para una salida compacta o 4 espacios para una salida más legible. Ambos producen XML semánticamente idéntico. La mayoría de los parsers XML tratan los nodos de texto de solo espacio en blanco entre elementos como espacio en blanco ignorable, por lo que el XML con sangría y el minificado son equivalentes para el análisis.
¿Cómo se convierte un array JSON anidado dentro de un objeto a XML?
Un valor de array JSON bajo una clave produce elementos hijos repetidos con el mismo nombre, reutilizando el nombre de la clave para cada elemento. Por ejemplo, { "items": [1, 2, 3] } produce tres elementos hermanos — no . Del mismo modo, { "products": [{"name":"A"},{"name":"B"}] } produce dos elementos , cada uno conteniendo un hijo . El nombre de la clave se usa tal cual para cada elemento del array; no se produce singularización. El único lugar donde aparece el nombre literal es cuando toda la entrada JSON es un array de nivel superior (véase arriba), donde es un nombre de envoltorio alternativo fijo.
¿Cómo convierto XML de vuelta a JSON?
Usa el Conversor XML a JSON complementario. Aplica las mismas convenciones @_ y #text a la inversa: los atributos XML se convierten en claves JSON con prefijo @_, el contenido de texto del elemento emparejado con atributos se convierte en una clave #text y los elementos hermanos repetidos con el mismo nombre se convierten en un array JSON. Las dos herramientas son simétricas para casos de uso de ida y vuelta.
¿Puedo validar o formatear la salida XML?
Sí — pega la salida XML en el Formateador XML para validar la conformidad, ajustar la sangría o minificar. El Formateador XML es la herramienta adecuada para inspeccionar y pulir el XML una vez que este conversor lo haya producido.
¿Existe un límite de tamaño de archivo para la entrada JSON?
No hay un límite estricto, pero las entradas mayores de 200 KB cambian automáticamente del modo en vivo al modo manual. En el modo manual aparece un botón Convertir y la conversión se ejecuta solo cuando haces clic en él — esto mantiene el navegador con capacidad de respuesta durante la serialización intensiva. Para archivos JSON muy grandes (de varios megabytes), considera herramientas de línea de comandos para mejor rendimiento: node -e "const {XMLBuilder}=require('fast-xml-parser');console.log(new XMLBuilder({attributeNamePrefix:'@_'}).build(JSON.parse(require('fs').readFileSync('in.json','utf8'))))" o un script Python equivalente con xmltodict.
¿Qué tipos JSON son compatibles?
Los seis tipos JSON son compatibles. Los objetos se convierten en elementos XML con elementos hijos. Los arrays se convierten en elementos hermanos repetidos con el mismo nombre. Las cadenas, los números, los booleanos y null se convierten en contenido de texto del elemento. Los booleanos y null se serializan como sus representaciones literales de cadena: true, false y contenido vacío para null. No se aplica ninguna coerción de tipos — los números se escriben en el contenido de texto XML exactamente como aparecen en el JSON, preservando los decimales y la precisión.

Herramientas relacionadas

Ver todas las herramientas →