Cómo convertir JSON a XML (con atributos)
JSON es lo que envían y guardan la mayoría de servicios web, apps y herramientas modernas. Pero muchos sistemas siguen esperando XML: feeds de productos, importaciones de tiendas y contabilidad, software de gestión antiguo, servicios SOAP y muchos archivos de configuración. Convertir el JSON te ahorra construir el XML a mano.
Esta guía muestra cómo se convierte cada parte del JSON en XML y cómo hacerlo con el conversor de JSON a XML gratuito, incluidos atributos, listas y nombres que XML no admite.
Cómo se convierte JSON en XML
- Cada clave de un objeto pasa a ser un elemento con ese nombre, y su valor, el texto del elemento.
- Una lista (array) repite su elemento una vez por entrada.
nullse convierte en un elemento vacío como<subtitle/>;trueyfalsese escriben como texto.- Todo va dentro de un único elemento raíz, porque un documento XML debe tener exactamente uno.
- Los caracteres con significado en XML se escapan:
&pasa a&y<a<. Los números se copian tal cual, así que24.50conserva su cero.
Este es el catálogo de una pequeña tienda en JSON:
{
"name": "Corner Books",
"books": [
{
"@id": "bk101",
"title": "XML & JSON for Everyone",
"price": { "@currency": "EUR", "#text": 29.95 },
"tags": ["data", "web"]
},
{
"@id": "bk102",
"title": "Daten für alle",
"price": { "@currency": "EUR", "#text": 24.50 },
"in stock": false,
"subtitle": null,
"tags": []
}
]
}y el XML que resulta, con catalog como elemento raíz:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<name>Corner Books</name>
<books id="bk101">
<title>XML & JSON for Everyone</title>
<price currency="EUR">29.95</price>
<tags>data</tags>
<tags>web</tags>
</books>
<books id="bk102">
<title>Daten für alle</title>
<price currency="EUR">24.50</price>
<in_stock>false</in_stock>
<subtitle/>
</books>
</catalog>Las claves que empiezan por @ se han convertido en atributos (id="bk101"), y #text en el texto de <price>, junto a su atributo currency. La clave in stock no puede ser un nombre XML por el espacio, así que pasó a in_stock, y la lista vacía tags no generó nada. Unas notas bajo el resultado te avisan de ambas cosas.
Consejo: el nombre de la lista se usa para cada entrada, así que "books" da <books> por cada libro. Si quieres el habitual <book>, llama a la lista "book" en tu JSON.
Cómo convertir JSON a XML
- Abre el conversor de JSON a XML y pega tu JSON en Entrada JSON, haz clic en Abrir archivo o suelta un archivo .json en el recuadro. Ejemplo carga uno de prueba. Si el JSON tiene un error, se muestra con su línea y columna.
- Escribe un nombre en Elemento raíz, como
catalog,productso el que espere el sistema de destino. - Elige las demás opciones, explicadas abajo.
- Haz clic en Convertir a XML y luego Descarga el archivo .xml o Cópialo.
Las opciones
- Elemento raíz. El nombre del elemento que lo envuelve todo. Es
roothasta que lo cambies. - Sangría. 2 espacios, 4 espacios o un tabulador, para que el XML se lea bien. No cambia los datos.
- Arrays. Repetir el elemento (por defecto) da
<tags>data</tags><tags>web</tags>, como en el ejemplo. Envolver los elementos mantiene la lista como un solo elemento y pone cada entrada en un<item>; así una lista vacía se queda como elemento vacío:
<catalog>
<name>Corner Books</name>
<books>
<item id="bk101">
<title>XML & JSON for Everyone</title>
<price currency="EUR">29.95</price>
<tags>
<item>data</item>
<item>web</item>
</tags>
</item>
<item id="bk102">
…
<tags/>
</item>
</books>
</catalog>- Las claves @ pasan a atributos. Activada por defecto. Si la desactivas,
@idy#textpasan a ser elementos normales, con un_delante porque los nombres XML no pueden empezar por@ni#:
<books>
<_id>bk101</_id>
<title>XML & JSON for Everyone</title>
<price>
<_currency>EUR</_currency>
<_text>29.95</_text>
</price>
…- Declaración XML. La primera línea,
<?xml version="1.0" encoding="UTF-8"?>. Déjala para archivos; quítala cuando el XML se pegue dentro de un documento mayor.
Cuando el JSON es una lista
Si tu JSON empieza por [, no hay claves con las que nombrar los registros, así que cada uno pasa a ser un <item> dentro del elemento raíz:
[
{ "name": "Ada", "city": "London" },
{ "name": "Alan", "city": "Manchester" }
]<?xml version="1.0" encoding="UTF-8"?>
<people>
<item>
<name>Ada</name>
<city>London</city>
</item>
<item>
<name>Alan</name>
<city>Manchester</city>
</item>
</people>Para obtener <person>, envuelve antes la lista en un objeto: { "person": [ … ] }.
Nombres que XML no admite
Las claves JSON pueden ser cualquier cosa; los nombres XML, no. No pueden tener espacios ni la mayoría de signos, ni empezar por un dígito o por xml. El conversor arregla esas claves por ti: los demás caracteres pasan a _, y un nombre que empieza mal lleva un _ delante, así 2024 pasa a _2024. Los dos puntos también se sustituyen, para que el resultado nunca tenga espacios de nombres por accidente. Los caracteres de control que XML no admite se eliminan del texto, y una nota indica cuántos.
Más herramientas
- XML a JSON: el camino inverso. Mira cómo convertir XML a JSON.
- Validador XML: comprueba el resultado con el esquema XSD del sistema al que lo importas.
- Formateador JSON: encuentra y corrige primero los errores del JSON.
¿Se sube mi JSON?
No. La conversión se hace en tu navegador, así que tus datos nunca salen de tu dispositivo. Nuestro servidor solo registra que hubo una conversión, para el límite diario.
Preguntas frecuentes
¿Al convertirlo de vuelta a JSON obtendré el mismo archivo?
Parecido, pero no siempre idéntico. XML no tiene números, true o false ni listas: todo es texto, y una lista con una sola entrada parece un elemento único. Guarda el JSON original si lo necesitas.
¿Puedo añadir un espacio de nombres?
No en el conversor: los dos puntos de las claves se sustituyen para que el XML sea válido. Añade el espacio de nombres al elemento raíz después, por ejemplo <catalog xmlns="https://example.com/catalog">.
¿Por qué falta una clave en el XML?
Seguramente era una lista vacía, que no genera ningún elemento con Repetir el elemento. Elige Envolver los elementos para conservarla como elemento vacío.