XML precede a JSON por casi una decada y fue la opcion predeterminada para servicios web (SOAP, RSS, la mayoria de la integracion empresarial) durante los anos 2000. JSON no lo supero en capacidad, XML puede representar cualquier cosa que JSON puede y mas; gano en peso y directitud para el trabajo especifico de mover datos entre un servidor y un cliente.
Los mismos datos, dos formas
<user>
<name>Ada Lovelace</name>
<age>36</age>
<active>true</active>
<skills>
<skill>mathematics</skill>
<skill>writing</skill>
</skills>
</user>
{
"user": {
"name": "Ada Lovelace",
"age": 36,
"active": true,
"skills": ["mathematics", "writing"]
}
}
La version en XML necesita una etiqueta de cierre para cada una de apertura, y un
elemento <skill> repetido para representar una lista, porque XML no tiene sintaxis
nativa de arreglo; un elemento <skills> con varios hijos <skill> podria ser
facilmente un solo hijo <skill>, y solo un esquema o convencion le dice al
lector cual es. Los [ ] de JSON dicen “lista” de manera inequivoca en dos caracteres.
Donde XML todavia gana
Atributos junto al contenido. <price currency="USD">42.00</price>
adjunta metadatos a un valor sin inventar un objeto contenedor. JSON no tiene
concepto de atributo; los mismos datos se convierten en {"price": {"value": 42.00, "currency": "USD"}} o una convencion como una clave @currency, ambas menos
directas que la sintaxis nativa de XML para exactamente esta forma.
Contenido mixto. Un parrafo de texto con marcado en linea, <p>Some <b>bold</b> text</p>, es la fuerza nativa de XML, por lo que los formatos de documento
(DocBook, la mayoria de los tuberias de publicacion, SVG) todavia lo usan. JSON no tiene
forma de entrelazar texto y marcado; representar un documento rico en
JSON usualmente significa un arbol de nodos tipados, lo cual es mas codigo para escribir y
leer que el marcado que XML ya te da gratis.
Espacios de nombres y esquemas estrictos. XML Schema (XSD) y los espacios de nombres permiten a una gran organizacion mezclar vocabularios de diferentes fuentes en un documento sin colisiones de nombres, con herramientas que han existido por mas de veinte anos. JSON Schema existe y hace trabajo real (el Generador de JSON Schema infiere uno a partir de un documento real), pero es mas joven y menos universalmente desplegado que XSD en sistemas empresariales grandes.
Donde JSON gana, que es la mayoria de las API
Peso. Sin etiquetas de cierre significa menos para transmitir y menos para analizar por los mismos datos, a menudo por un margen amplio en documentos profundamente anidados.
Mapeo directo a las propias estructuras de datos de un programa. JSON.parse en
JavaScript, o un equivalente de una linea en casi todos los otros idiomas,
convierte un documento JSON en los tipos nativos de objeto y arreglo de ese lenguaje
sin un modelo intermedio. XML necesita un DOM, o una clase generada por esquema,
entre el texto y los datos que un programa realmente usa.
Sin preguntas de tipado implicito. Cada valor de XML es texto hasta que algo
externo (un esquema, una convencion) dice lo contrario; <age>36</age> es una
cadena que contiene “36” a menos que se indique que es un numero. Los tipos number, boolean,
y null de JSON son explicitos en la sintaxis en si, por lo que no hay nada que
configurar ni adivinar.
En la practica
Las nuevas API REST se predeterminan a JSON casi sin excepcion hoy. XML persiste donde sus propias fortalezas son importantes: servicios SOAP en sistemas empresariales anteriores, feeds RSS y Atom, SVG y otros formatos nativos de marcado, y donde los atributos o el contenido mixto son la forma real de los datos en lugar de un ajuste incomodo.
Convirtiendo entre ellos
El Convertidor JSON a XML funciona en ambas direcciones,
con controles para prefijos de espacios de nombres y si un valor dado se convierte en un
atributo XML o un elemento hijo, ya que esa eleccion no tiene una unica respuesta
correcta y depende de lo que consuma la salida. Usa el DOMParser del navegador
para leer XML en lugar de un analizador hecho a mano, y cada
valor vuelve como una cadena al entrar, lo cual la herramienta indica en lugar de
adivinar silenciosamente tipos que XML no lleva.