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.
Opciones · 2 espacios · JSON → XML
¿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": {...} } →
**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
**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" } } →
**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
**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
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
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 hijosArray 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
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
Cómo usar
- 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
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
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
// 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 // 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
// Input: [{ "id": 1 }, { "id": 2 }]
// Output: <root><item><id>1</id></item><item><id>2</id></item></root>
// Tag names are generic // 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.
// Input: { "tag": { "id": "42", "name": "Alice" } }
// Output: <tag><id>42</id><name>Alice</name></tag> ← id is a child element // 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.
// Input: { "price": { "@_currency": "USD", "value": "29.99" } }
// Output: <price currency="USD"><value>29.99</value></price>
// Text is a child element, not text content // 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.
// JSON key starts with digit — invalid XML element name
// Input: { "1stItem": "value" }
// Output: <1stItem>value</1stItem> ← invalid XML // 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.
// JSON: { "query": "name = 'Alice' & role = 'admin'" }
// Converter outputs: <query>name = 'Alice' & role = 'admin'</query>
// If double-processed: &amp; — consumer is re-escaping // Converter output is correct — consume it as XML, not as a raw string // <query>name = 'Alice' & 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?
¿Cómo decide la herramienta cuál es el elemento raíz XML?
¿Por qué un objeto JSON con múltiples claves se envuelve en ?
¿Cómo se convierte un array JSON de nivel superior a XML?
¿Cómo convierto claves JSON en atributos XML?
¿Para qué sirve la clave #text?
¿La sangría afecta a la estructura XML?
¿Cómo se convierte un array JSON anidado dentro de un objeto a XML?
¿Cómo convierto XML de vuelta a JSON?
¿Puedo validar o formatear la salida XML?
¿Existe un límite de tamaño de archivo para la entrada JSON?
¿Qué tipos JSON son compatibles?
Herramientas relacionadas
Ver todas las herramientas →Decodificador y Codificador Base64
Codificación y Formato
Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.
Convertidor de CSV a JSON
Codificación y Formato
Convierte CSV a JSON en tu navegador. RFC 4180, inferencia de tipos, fila de cabecera, seguro para big-int. 100% privado, sin carga.
JSON Diff (Comparar)
Codificación y Formato
Compara dos archivos JSON al instante en tu navegador. Resaltado lado a lado, salida RFC 6902 JSON Patch, ignora campos ruidosos como marcas de tiempo e IDs. 100% privado, sin carga.
Formateador y Validador JSON
Codificación y Formato
Formatea, valida y embellece JSON al instante en tu navegador. Herramienta gratuita con validación sintáctica, detección de errores, minificación y copia con un clic. 100% privado.
Validador JSON Schema
Codificación y Formato
Valida JSON contra cualquier JSON Schema al instante en tu navegador. Compatible con Draft 2020-12, 2019-09 y Draft-07 con mensajes de error con ruta precisa. 100% privado, sin carga, sin cuenta, gratis.
Convertidor de JSON a CSV
Codificación y Formato
Convierte JSON a CSV en tu navegador. Presets RFC 4180, Excel-EU, TSV y Pipe. Aplana anidados o stringify. 100% privado, sin carga.