Ir al contenido principal
CuteJSON
↑↓ Navegar Enter Seleccionar Esc Cerrar

JSON vs XML: una comparacion practica

Publicado 4 min de lectura Por Akash Kinkar Pandey

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.

Volver a todas las entradas