J’en ai marre de voir du JSON partout. J’ai même vu des gens proposer de remplacer du XML par du JSON juste parce que c’est plus moderne, plus léger et plus compatible. « JSON is the new XML » est un effet de mode, un mauvais effet de mode. On va se retrouver comme avant avec des gens qui vont se réveiller dans quelques mois/années avec des formats de données pas du tout adaptés à leur usage.
Coupons un peu dans le tas :
JSON n’est pas vraiment plus simple à lire par un humain
Pour un petit fichier en volume comme en hiérarchie, le JSON a un léger avantage sur le XML mais ce n’est pas franchement significatif.
Pour un gros fichier ou avec beaucoup de hiérarchie, le JSON devient complètement illisible à suivre au niveau des imbrications.
JSON n’est pas plus simple à écrire par un humain
JSON est un peu moins verbeux mais plus propice aux erreurs : facile d’oublier une virgule en fin de ligne, ou d’en mettre une par erreur à la dernière ligne. Sur les gros fichiers les niveaux d’imbrication seront eux aussi un écueil à l’écriture.
En comparaison la verbosité d’XML rend difficile les erreurs et le disponibilité de fichiers grammaire permettent de faire de l’aide à la saisie voire de valider en tems réel le contenu.
La différence de poids n’est pas significative
JSON est plus léger que le XML d’environ un tiers (pour des fichiers fortement structurés, beaucoup moins pour les autres). À moins de 1,5 Ko une fois compressé en gzip (donc 6 Ko non compressé) ça tient dans un paquet TCP/IP et 500 octets de moins ne changent strictement rien. Sur disque on compte de toutes façons au moins par paquets de 4K.
Pour faire une différence significative de 10 Ko sur le réseau il faut une donnée de 160 Ko avant compression. Ça concerne d’autant moins de monde qu’à ce volume le JSON n’est plus du tout lisible.
JSON n’est pas plus natif que XML
XML est natif sur tous les outils, langages et navigateurs depuis des années là où JSON n’a d’API native que sur les navigateurs récents, certains langages et quelques outils.
JSON est en fait natif en javascript via eval(), mais ça n’est pas plus performant. Pour une même donnée, lire du XML via DOM est 30% plus rapide que lire du JSON avec eval(). Pour avoir sécurité et fiabilité en lecture, ou pour faire de l’écriture JSON, il faudra une biblothèque pas native du tout sur IE7 ou Safari pour iPhone 3.2. Elle fera au moins 5 Ko et ne sera donc rentabilisée par rapport au XML natif que si on transfert au moins 15 Ko de JSON.
JSON n’est pas vraiment extensible ou évolutif
JSON permet souvent d’ajouter de nouvelles clefs sans modifier casser la compatibilité. Si on souhaite ajouter une date de mise à jour à une liste de chaînes de caractères, il faudra toutefois modifier le format, mettre à jour tous les outils concernés. Si on souhaite mixer des formats différents là ça devient vite un casse-tête et des solutions bidouille.
En XML on a la possibilité d’insérer des méta-données dans des attributs, ainsi que de mixer différents concepts ou formats à l’aide d’espaces de noms. Ce sont des fonctionnalités qui ont leurs limites, mais qui ont prouvé apporter un peu de souplesse et d’évolutivité aux formats créés.
Compatible avec l’existant
Outre le concept de « natif », beaucoup d’outils, d’applications, de progiciels ou de chaînes de traitement sont adaptés à l’exploitation ou à l’exportation de données XML. Côté JSON les plus récents savent faire de l’export, tout le reste est à traiter en spécifique.
Sur l’existant XML j’ai des concepts de signature, des mapping XML-Objet en Java, des outils qui font du filtre ou du routage, de la validation, des compositions entre données XML.. tout ça n’existe simplement pas en JSON. Quand (si) j’en aurai besoin, il faudra réinventer la roue.
Hype, mode et trucs de jeunes développeurs innovants
JSON était simple au départ parce qu’on utilisait eval(), que ça renvoyait immédiatement sur un objet javascript sans demander au développeur client de faire des manipulations complexes ou de charger une bibliothèque de plus. Ça a permis d’ouvrir quelques API à des gens qui auraient eu du mal autrement. C’est indéniablement positif sur ce point là.
Ensuite s’est rendu compte que pour la fiabilité et la sécurité il fallait du code en plus. Faire des petites fonctions qui lisent du XML simple pour créer des objets javascript natifs aurait été plus simple, plus performant et moins lourd mais c’était trop tard : c’était « hype ». Du coup on a utilisé des bibliothèques d’analyse de 10 Ko de pur javascript pour lire des JSON de moins de 1 Ko et annoncer que ces derniers étaient moins lourds que le XML correspondant. Allez comprendre.
Depuis on a des fonctions natives dans les navigateurs récents et un peu plus de support dans les outils récents (c’est la mode, il a bien fallu faire avec et supporter le nouvel usage) donc ça a du sens pour quelques usages (échange de petites données structurées avec un navigateur récent) mais la mode prend encore trop le pas sur des grilles de comparaison argumentées et factuelles et même dans les usages les plus adaptés, le bénéfice sur le XML est rarement très significatif.
Laisser un commentaire