Pourquoi tout le monde choisit-il JSON sur XML pour jQuery?

Je pensais que XML est très portable et peut être utilisé comme une mini-firebase database. J’ai vu XML utilisé partout. Je vois même de grandes entresockets basculer vers JSON . Même Microsoft a intégré le support pour JSON. Quel est tout le battage médiatique sur JSON?

Fondamentalement, JSON étant reconnu nativement par JavaScript, il est vraiment léger, minimaliste et hautement portable car il ne repose que sur deux structures fondamentales:

  • Une collection de paires nom / valeur. Dans divers langages, ceci est réalisé sous la forme d’un object, d’un enregistrement, d’une structure, d’un dictionnaire, d’une table de hachage, d’une liste de clés ou d’un tableau associatif.
  • Une liste ordonnée de valeurs. Dans la plupart des langues, ceci est réalisé sous la forme d’un tableau, d’un vecteur, d’une liste ou d’une séquence.

XML ne commence pas vraiment à briller tant que vous ne commencez pas à mélanger différents schémas de noms. Vous voyez alors que JSON commence à tomber, mais si vous avez juste besoin d’un format de sérialisation pour vos données, JSON est plus petit, plus léger, plus lisible par l’homme et généralement plus rapide que XML.

JSON offre un gros avantage par rapport à XML: je n’ai pas à décider comment formater les données. Comme certains l’ont montré, il existe de nombreuses manières de faire des structures de données simples en XML – en tant qu’éléments, valeurs d’atsortingbuts, etc. Ensuite, vous devez le documenter, écrire XML Schema ou Relax NG ou autre. un gâchis.

XML peut avoir ses avantages, 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 d’incompatibilité d’impédance entre les types de données simples dans JSON et dans 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 ssortingng 

Lorsqu’elle est traduite via JSON (en utilisant une bibliothèque comme ‘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 nécessite uniquement un parsingur 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 des booléens comme des booléens. En utilisant la bibliothèque ‘simplejson’ dans Python, une simplejson.loads(some_json_ssortingng) me rendrait 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 si faire des éléments ou des atsortingbuts. Les deux suivants sont valides:

  5 8.5 yes deep and steep!   deep and steep!  

Donc, non seulement je dois penser aux données que je souhaite envoyer au client, mais je dois aussi réfléchir à la manière de le formater. XML, bien que plus simple que le langage SGML simple en étant plus ssortingct avec ses règles, offre encore de nombreuses manières de réfléchir à ces données. Ensuite, il faudrait que je le génère. Je ne pouvais pas simplement prendre un dictionnaire Python (ou une autre structure de données simple) et dire “va te faire dans mon XML”. Je ne pouvais pas recevoir un document XML et dire immédiatement “va te faire des objects et des structures de données” sans écrire un parsingur 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 plus aux personnes provenant d’un arrière-plan de langage dynamic, car les types de données de base (listes, dictionnaires, etc.) intégrés à JavaScript / JSON correspondent directement à des types de données identiques ou similaires en Python, Perl, Ruby, etc.

Les performances de JSON ne sont pas très différentes de celles de XML pour la plupart des cas d’utilisation, JSON n’est pas bien adapté et lisible pour les structures profondément nestedes … vous rencontrerez]]]}], ce qui rend difficile le débogage

C’est léger comparé à XML. Si vous devez évoluer, réduisez vos besoins en bande passante!

Comparer JSON

  [ { color: "red", value: "#f00" }, { color: "green", value: "#0f0" }, { color: "blue", value: "#00f" }, { color: "cyan", value: "#0ff" }, { color: "magenta", value: "#f0f" }, { color: "yellow", value: "#ff0" }, { color: "black", value: "#000" } ] 

à XML:

    red #f00   green #0f0   blue #00f   cyan #0ff   magenta #f0f   yellow #ff0   black #000   

Juste une anecdote de mon expérience personnelle:

J’ai écrit un petit répertoire Javascript, d’abord avec les données en XML, puis je l’ai adapté pour utiliser JSON afin de pouvoir les exécuter côte à côte et comparer les vitesses avec Firebug. Le JSON a fini par être environ 3 fois plus rapide (350 à 400 ms vs 1200 à 1300 ms pour afficher toutes les données). En outre, comme d’autres l’ont noté, le JSON est beaucoup plus simple pour les yeux et la taille du fichier a été réduite de 25% grâce au balisage plus léger.

           

Avec les atsortingbuts, XML est agréable. Mais pour une raison quelconque, le XML maison est généralement composé à 100% d’éléments et moche.

La consommation facile par JavaScript peut être l’une des raisons ..

JSON est idéal pour la consommation de données dans les applications Web à partir de services Web pour sa taille et sa facilité d’utilisation, notamment grâce à la prise en charge intégrée de JavaScript . Imaginez la surcharge de calcul pour parsingr un fragment xml par rapport à la recherche instantanée dans JSON.

Un très bon exemple est JSON-P. Vous pouvez récupérer des données à partir d’un service my_callback({"color": "blue", "shape":"square"}); dans un appel de fonction de rappel, comme my_callback({"color": "blue", "shape":"square"}); dans une balise générée dynamicment, les données peuvent être directement consommées dans la fonction my_callback() . Il n'y a aucun moyen de se rapprocher de cette commodité en utilisant XML.

XML serait le format de choix pour les documents volumineux, où vous disposez d'un cadre de rendu des pages de données dans plusieurs formats à l'aide de XSLT. XML peut également être utilisé avec les fichiers de configuration d'application pour une meilleure lisibilité parmi de nombreuses autres utilisations.

Personne ici n’a mentionné le principal avantage de XML: les règles de validation (DTD, XSD). Mes conclusions, ayant utilisé les deux:

  • JSON est parfait pour ajax, surtout si vous développez à la fois le serveur et le client. Vous créez essentiellement des objects js directement dans votre script de serveur!
  • XML brille dans les environnements d’entreprise, lorsque vous devez définir des normes d’échange de données entre les grandes organisations bureaucratiques. Souvent, une partie développe ses mois avant l’autre, ce qui lui permet de valider ses demandes par rapport aux XSD convenus. En outre, dans les grandes entresockets, le transfert de données est souvent traduit entre différents systèmes. C’est aussi la force de XML, pense XSLT. Exemple: conversion sans code en JSON: p

Bien sûr, json-schema est en cours de développement, mais vous ne le trouverez nulle part.

Je suis un fan des deux, ils ont juste des forces différentes.

Maintenant qu’il existe des encodeurs et des décodeurs JSON pour la plupart des langages, il n’y a aucune raison de ne pas utiliser JSON pour des utilisations qui ont du sens (et c’est probablement 90% des cas d’utilisation pour XML).

J’ai même entendu parler de chaînes JSON utilisées dans de grandes bases de données SQL pour faciliter les changements de schéma.

Honnêtement, il n’y a pas tellement de différence entre JSON et XML dans le fait qu’ils peuvent représenter tous les types de données. Cependant, XML est syntaxiquement plus grand que JSON et le rend plus lourd que JSON.

JSON n’a aucune impédance-incompatibilité avec la programmation JavaScript. JSON peut contenir des entiers, des chaînes, des listes et des tableaux. XML n’est que des éléments et des nœuds qui doivent être analysés en nombres entiers et ainsi de suite avant de pouvoir être consommés.

Les deux sont excellents et très portables. Cependant, JSON gagne en popularité car il se sérialise en moins de caractères dans la plupart des cas (ce qui se traduit par un délai de livraison plus rapide) et comme il correspond à la syntaxe des objects JavaScript, il peut être directement traduit en mettre en place.

XML est toujours génial. JSON est juste le “dernier et le meilleur” par rapport à XML.

Facilement analysé par JavaScript et léger (un document JSON est plus petit qu’un document XML contenant les mêmes données).

JSON est effectivement sérialisé JavaScript dans lequel vous pouvez évaluer (aJsonSsortingng) directement dans un object JavaScript. Dans un navigateur, le JSON est parfaitement adapté à JavaScript. En même temps, JavaScript est un langage dynamic de type très lâche et ne peut pas prendre en charge de manière native toutes les informations de type spécifiques disponibles dans un document Xml / Xsd. Ces métadonnées supplémentaires (qui sont excellentes pour l’interopérabilité) constituent une entrave à l’utilisation de JavaScript, ce qui rend le travail plus fastidieux et cubique.

Taille vs performance

Si vous êtes dans un navigateur, JSON est plus rapide à sérialiser / désérialiser car il est plus simple, plus compact et, plus important, supporté de manière native. J’ai quelques benchmarks de firebase database northwind disponibles comparant la taille et la vitesse entre les différents sérialiseurs disponibles. Dans la bibliothèque de classes de base, le sérialiseur XML DataContract de Microsoft est 30% plus rapide que celui JSON. Bien que cela ait plus à voir avec l’effort que Microsoft a mis dans leur sérialiseur XML, alors que j’ai pu développer un JsonSerializer plus rapide que 2,6 fois celui de XML. En ce qui concerne les charges utiles basées sur les tests de performances, il semble que XML ait plus de deux fois la taille de JSON. Cependant, cela peut rapidement se produire si votre charge XML utilise de nombreux espaces de noms différents dans le même document.

XML est une huile de serpent gonflée dans la plupart des situations. JSON vous donne la plupart des avantages sans le ballonnement.

Un avantage majeur autre que ceux mentionnés ici. Pour les mêmes données, il existe plusieurs manières de le représenter en tant que fichier XML, mais d’une seule manière avec JSON, supprime l’ambiguïté 🙂

Je ne suis pas un expert de loin, mais dans les différentes sociétés pour lesquelles j’ai travaillé, nous utilisons généralement XML dans de petits environnements de données ou des valeurs de configuration (web.config est un excellent exemple).

Lorsque vous avez de grandes quantités de données, vous souhaiterez généralement générer des rapports sur ces données. Et XML n’est pas une excellente source de rapports. Dans l’ensemble, il semble qu’une firebase database transactionnelle soit plus facile à rapporter / rechercher que XML.

Est-ce que ça a du sens? Comme je l’ai dit ci-dessus, je ne suis pas un expert, mais d’après mon expérience, cela semble être le cas. En outre, je pense que Microsoft a intégré le support JSON en raison de la vague de développeurs qui ont migré vers des actions côté client ou scriptées pour améliorer les graphismes de l’interface utilisateur ( Ajax ) et Ajax n’a pas été utilisé autant que les autres YUI de Yahoo est également dans ce mélange) en raison de leur belle intégration des objects sérialisables en utilisant JSON.

Je me trouve en train d’écrire du code en implémentant le sérialiseur JSON dans mon code VB. C’est WAY trop facile et du sharepoint vue de la mise à niveau / modification, vous ne pouvez pas le battre. C’est la manière de Microsoft de restr accro au VS, je suppose. J’ai récemment converti une application d’entreprise en Ajax (via jQuery) et en utilisant le format JSON. Cela a pris environ 2 semaines pour le faire. En fait, je remercie Microsoft de l’avoir intégré car sans lui, j’aurais dû écrire beaucoup de code supplémentaire.