MagMax Blog

Aviso: En este blog puede encontrar código!

XML vs JSON

| Comments

Ú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.

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 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. Además, 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 enviar.

Hay que agregar que un archivo JSON siempre debería ir codificado en UTF-16 little endian, ya que estaba pensado para javascript/java, 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 para procesarlo.

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).

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.

Sin embargo, 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 éso 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…

Por tanto, me declaro partidario de XML. Eso sólo significa que en la mayor parte de los casos, utilizaré XML, pero es perfectamente probable que, en algún caso, encuentre JSON mucho más adecuado.

Comments