Saltar al contenido
jsonbeautifiers
Español

JSON a XML

XML bien formado con la raíz que elijas, atributos y escapado correcto.

JSON
XML

Nada de lo que pegues sale de tu navegador. La lista de permitidos de connect-src convierte eso en una garantía del navegador, no en una promesa. Compruébalo tú mismo

Convierte JSON a XML bien formado, con el elemento raíz que elijas, soporte de atributos y escapado correcto.

Los dos modelos de datos no encajan del todo, así que esta conversión toma decisiones. Aquí están listadas, y se reportan en las notas de salida cuando afectan a tu documento.

Cómo funciona el mapeo

Las claves de objeto pasan a ser elementos
Una clave "name" pasa a ser un elemento <name>.
Una clave con prefijo @ pasa a ser un atributo
{"@id": "1"} pasa a ser id="1" en el elemento que la contiene.
Una clave #text pasa a ser el texto del elemento
Que es la forma de producir un elemento que tiene a la vez atributos y contenido.
Los arrays repiten el elemento
Así es como XML expresa una lista. No hay un elemento envoltorio aparte salvo que lo construyas tú.
null pasa a ser xsi:nil
La convención de XML Schema. Un elemento vacío sería indistinguible de una cadena vacía.

Nombres de clave que no son nombres XML válidos

Los nombres de elemento XML no pueden empezar por un dígito ni contener espacios ni la mayoría de signos de puntuación. Las claves JSON hacen ambas cosas continuamente. Esas claves se reescriben con guiones bajos, y la conversión te avisa de que ha ocurrido en lugar de hacerlo en silencio, porque convertir de vuelta no restaurará los nombres originales.

Lo que XML tiene y JSON no

Espacios de nombres, instrucciones de procesamiento, un lenguaje de esquemas que precede a JSON Schema en una década, comentarios, y una distinción entre atributos y elementos hijo. Nada de eso sobrevive a un ida y vuelta por JSON, así que una conversión de JSON a XML produce XML válido pero estructuralmente más simple que el XML escrito a mano.

How to do this in code

Convertir en código.

py Python
import json
from dicttoxml import dicttoxml

xml = dicttoxml(json.loads(text), custom_root='root', attr_type=False)

# attr_type=False turns off the type="str" attributes dicttoxml
# adds to every element by default.
js JavaScript
import { XMLBuilder } from 'fast-xml-parser';

const builder = new XMLBuilder({
  format: true,
  attributeNamePrefix: '@',
  ignoreAttributes: false,
});
const xml = builder.build(JSON.parse(text));
cs C#
using Newtonsoft.Json;

XNode node = JsonConvert.DeserializeXNode(json, "root");
var xml = node.ToString();

Preguntas frecuentes

¿Por qué aparece un atributo xsi:nil?
Porque XML no tiene null. La convención de XML Schema marca un elemento como nil con ese atributo, lo que mantiene null distinguible de una cadena vacía. Un <field/> vacío podría ser cualquiera de los dos.
¿Puedo convertir de JSON a XML y volver?
Para documentos que se mantengan dentro de este mapeo, sí. Los nombres de clave que hubo que reescribir no volverán, y tampoco la distinción entre un array de un elemento y un valor suelto, ya que ambos producen un solo elemento.