Creo que una gran ventaja de JSON sobre XML es que no tengo que decidir cómo formatear los datos. Como algunos han demostrado, existen numerosas formas de hacer incluso estructuras de datos simples en XML: como elementos, como valores de atributos, etc. Luego debe documentarlo, escribir un esquema XML o Relax NG o alguna otra basura ... Es un desastre.
XML puede tener sus ventajas, pero para el intercambio de datos básicos, JSON es mucho más compacto y directo. Como desarrollador de Python, no hay desajuste de impedancia entre los tipos de datos simples en JSON y en Python. Entonces, si estaba escribiendo un controlador del lado del servidor para una consulta AJAX que preguntaba sobre las condiciones de nieve para una estación de esquí en particular, crearía un diccionario como el siguiente:
conditions = {
'new_snow_24': 5.0,
'new_snow_48': 8.5,
'base_depth': 88.0,
'comments': 'Deep and steep!',
'chains_required': True,
}
return simplejson.dumps(conditions) # Encode and dump `conditions` as a JSON string
Cuando se traduce a través de JSON (usando una biblioteca como 'simplejson' para Python), la estructura de JSON resultante se ve casi idéntica (excepto en JSON, los booleanos están en minúsculas).
Decodificar esa estructura solo requiere un analizador JSON, ya sea para Javascript o Objective-C para una aplicación nativa de iPhone o C # o un cliente Python. Las carrozas se interpretarían como carrozas, las cuerdas como cuerdas y los booleanos como booleanos. Usando la biblioteca 'simplejson' en Python, unsimplejson.loads(some_json_string)
declaración me devolvería una estructura de datos completa como acabo de hacer en el ejemplo anterior.
Si escribiera XML, tendría que decidir si hacer elementos o atributos. Los dos siguientes son válidos:
<conditions>
<new-snow-24>5</new-snow-24>
<new-snow-48>8.5</new-snow-48>
<chains-required>yes</chains-required>
<comments>deep and steep!</comments>
</conditions>
<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
<comments>deep and steep!</comments>
</conditions>
Entonces, no solo tengo que pensar en los datos que quiero enviar al cliente, también tengo que pensar en cómo formatearlos. XML, si bien es más simple que SGML simple al ser más estricto con sus reglas, aún proporciona demasiadas formas de pensar en esos datos. Entonces tendría que empezar a generarlo. No podría simplemente tomar un diccionario de Python (u otra estructura de datos simple) y decir "ve a convertirte en mi XML". No pude recibir un documento XML e inmediatamente dije "ve a convertirte en objetos y estructuras de datos" sin escribir un analizador personalizado, o sin requerir la sobrecarga adicional de XML Schema / Relax NG y otros dolores similares.
En resumen, es mucho más fácil y directo codificar y decodificar datos en JSON, especialmente para intercambios rápidos. Esto puede aplicarse más a las personas que provienen de un entorno de lenguaje dinámico, ya que los tipos de datos básicos (listas, diccionarios, etc.) integrados en JavaScript / JSON se asignan directamente a los mismos tipos de datos o similares en Python, Perl, Ruby, etc.