JSON a XML
XML bien formado con la raíz que elijas, atributos y escapado correcto.
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.