Je trouve que l'un des grands avantages de JSON par rapport à XML est que je n'ai pas à décider comment formater les données. Comme certains l'ont montré, il existe de nombreuses façons de créer même des structures de données simples en XML - sous forme d'éléments, de valeurs d'attributs, etc. un gâchis.
XML peut avoir ses mérites, mais pour l'échange de données de base, JSON est beaucoup plus compact et direct. En tant que développeur Python, il n'y a pas de discordance d'impédance entre les types de données simples en JSON et en Python. Donc, si j'écrivais un gestionnaire côté serveur pour une requête AJAX qui posait des questions sur les conditions de neige pour une station de ski particulière, je créerais un dictionnaire comme suit:
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
Lorsqu'elle est traduite via JSON (en utilisant une bibliothèque telle que 'simplejson' pour Python), la structure JSON résultante semble presque identique (sauf en JSON, les booléens sont en minuscules).
Le décodage de cette structure ne nécessite qu'un analyseur JSON, que ce soit pour Javascript ou Objective-C pour une application iPhone native ou C # ou un client Python. Les flottants seraient interprétés comme des flottants, les chaînes comme des chaînes et les booléens comme des booléens. En utilisant la bibliothèque 'simplejson' en Python, une simplejson.loads(some_json_string)
instruction me redonnerait une structure de données complète comme je viens de le faire dans l'exemple ci-dessus.
Si j'écrivais du XML, je devrais décider de faire des éléments ou des attributs. Les deux éléments suivants sont valides:
<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>
Donc, non seulement je dois penser aux données que je pourrais vouloir envoyer au client, mais je dois aussi réfléchir à la façon de les formater. XML, bien que plus simple que SGML ordinaire en étant plus strict avec ses règles, offre encore trop de façons de penser à ces données. Ensuite, je devrais commencer à le générer. Je ne pouvais pas simplement prendre un dictionnaire Python (ou une autre structure de données simple) et dire "allez faire de vous-même dans mon XML". Je ne pouvais pas recevoir un document XML et dire immédiatement "allez vous transformer en objets et structures de données" sans écrire un analyseur personnalisé, ou sans exiger la surcharge supplémentaire de XML Schema / Relax NG et d'autres problèmes similaires.
En bref, il est beaucoup plus facile et beaucoup plus direct d'encoder et de décoder des données en JSON, en particulier pour les échanges rapides. Cela peut s'appliquer davantage aux personnes issues d'un contexte de langage dynamique, car les types de données de base (listes, dictionnaires, etc.) intégrés à JavaScript / JSON correspondent directement aux types de données identiques ou similaires en Python, Perl, Ruby, etc.