Contenido

XML vs JSON

Últimamente estoy viendo bastantes comparativas entre JSON y XML. No quería ser menos, así que investigué un poco para poder entrar en este tipo de comparativas.

Para mi desgracia, me he dado cuenta de que no son comparables. Comparar XML con JSON es como comparar un documento de OpenOffice con un archivo de texto. Son dos cosas completamente diferentes.

XML

Un archivo JSON es un conjunto de datos agrupados. Nada más. Puede tener una estructura jerárquica, pero lo único que tienes son objetos, vectores, variables y valores.

Un archivo XML es mucho más. Es un conjunto de datos estructurado. Como tal, admite consultas (xpath), tiene una estructura fácilmente comprobable (DTD, XML Schema), puede visualizarse (CSS), procesarse (XSL), etc.

Sin embargo, mucha gente sigue empeñada en compararlos. Veamos sus razones:

Espacio

A menudo se alega que JSON es mucho más pequeño que XML, por lo que es mucho mejor para compartir datos en red.

Según mis cálculos, un archivo JSON es, aproximadamente, las tres cuartas partes de un archivo XML (comparando archivos “equivalentes”, ya que en la red tienden a comparar archivos JSON que no tienen la misma jerarquía que el “homólogo” en XML), luego podría parecer que tienen razón.

Sin embargo, si lo que quieres es ahorrar espacio, es mejor utilizar algún formato binario, como BSON, o un JSON/XML comprimido. Dado que son archivos de texto, es posible que ambos se compriman una barbaridad, dando lugar a tamaños muy similares.

Además, un XML admite referencias dentro del propio XML, así como entidades, por lo que se pueden generar macros, que es algo que JSON no soporta. Por si fuera poco, XML soporta referencias a archivos externos (que pueden encontrarse ya en la máquina destino y no tener que enviarse por la red), por lo que en teoría sería mucho más rápido de transmitir.

Hay que agregar que un archivo JSON siempre debería ir codificado en UTF-16 little endian, ya que estaba pensado para JavaScript, pero un XML puede ir codificado en cualquier sistema. De esta manera, según qué contenido, puede ocupar mucho menos un XML que un JSON.

Velocidad

En muchos sitios se alega que JSON, al ser más pequeño que XML, es más rápido de procesar.

Eso no es del todo cierto: JSON, al tener muchas menos características que XML, debería ser más rápido de procesar.

Sin embargo, no es posible utilizar Firefox como téster (lo he visto), ya que la velocidad de proceso dependerá de la librería que utilicemos.

El problema de este tipo de comparación es que es muy peligrosa y poco fiable ya que, insisto una vez más, estamos comparando dos cosas que no son comparables. ¿Cuál es el precio de comprobar que el JSON tiene la estructura que esperamos? ¿Cuál es el precio de tener que programar, cada vez, el comprobador? Con XML lo tenemos muy sencillo, ya que basta con indicar el XML Schema y ya se encargará la librería que estamos utilizando.

Variedad

Como todo, XML se creó con una finalidad y JSON se creó con una finalidad completamente distinta. XML es una manera de estructurar datos, mientras que JSON es una manera de intercambiar datos entre un lenguaje que debería ser sencillo (JavaScript) y otro lenguaje (Java, Ruby, Python, …).

El mayor uso de JSON, como no podía ser de otra manera, es para comunicar una aplicación cliente en JavaScript con el servidor. La razón es muy sencilla: una cadena JSON no deja de ser un objeto JavaScript serializado.

De todas maneras, de la misma manera que a XML se le han encontrado otros usos posteriores, como SOAP, seguramente JSON tenga muchos otros usos.

Opinión personal

Mi opinión personal es que ambos son igual de válidos, pero depende de para qué queremos utilizarlos. De la misma manera que no se utiliza un documento OpenOffice ni un archivo de texto para todo, no es lógico utilizar XML ni JSON para todo.

Todo lo que se puede hacer con JSON se puede hacer con XML, pero no al revés. Nadie puede ignorar que XML tiene metadatos (los atributos) mientras que eso no existe en JSON. Esta característica se puede simular en JSON mediante datos, pero queda mucho más elegante utilizar los atributos de XML.

Finalmente, creo que JSON está bien para pequeñas estructuras de datos -pueden tener muchos datos, pero la estructura de éstos es pequeña-, mientras que XML puede albergar estructuras mucho más complejas.

Como soy de la opinión de que cualquier cosa tiende a complicarse, una estructura de datos que ahora es pequeña puede tender a crecer, y cambiar de JSON a XML puede no ser todo lo divertido que nos gustaría…