web-dev-qa-db-fra.com

Pourquoi tout le monde choisit JSON sur XML pour jQuery?

Je pensais que XML est très portable et peut être utilisé comme une mini base de données. J'ai vu XML utilisé partout. Je vois même de grandes entreprises passer à JSON . Même Microsoft a intégré la prise en charge de JSON. Quel est tout le battage médiatique sur JSON?

156
Luke101

Fondamentalement, car JSON est 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 diverses langues, cela est réalisé sous la forme d'un objet, d'un enregistrement, d'une structure, d'un dictionnaire, d'une table de hachage, d'une liste à clés ou d'un tableau associatif.
  • Une liste ordonnée de valeurs. Dans la plupart des langues, cela est réalisé sous la forme d'un tableau, d'un vecteur, d'une liste ou d'une séquence.
226
CMS

XML ne commence pas vraiment à briller jusqu'à ce que vous commenciez à mélanger différents schémas d'espaces de noms. Ensuite, vous voyez JSON commencer à 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.

136
jcdyer

Je trouve qu'un grand avantage de JSON sur 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 faire même des structures de données simples en XML - en tant qu'éléments, en tant que valeurs d'attribut, etc. Ensuite, vous devez le documenter, rédiger un schéma XML ou Relax NG ou certains autres conneries ... C'est 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 différence 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 demandait 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 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 analyseur JSON, que ce soit pour Javascript ou Objective-C pour une application iPhone native ou C # ou un client Python. Les flotteurs 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 instruction simplejson.loads(some_json_string) 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 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 veux 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, fournit encore trop de façons de penser à ces données. Ensuite, je devrais aller le générer. Je ne pouvais pas simplement prendre un dictionnaire Python (ou une autre structure de données simple) et dire "allez vous rendre 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 nécessiter la surcharge supplémentaire de XML Schema/Relax NG et d'autres de ces douleurs.

Le plus court est qu'il est juste beaucoup plus facile et beaucoup plus direct d'encoder et de décoder des données en JSON, en particulier pour des échanges rapides. Cela peut s'appliquer davantage aux personnes issues d'un arrière-plan de langage dynamique, car les types de données de base (listes, dictionnaires, etc.) intégrés à JavaScript/JSON sont directement mappés aux types de données identiques ou similaires en Python, Perl, Ruby, etc.

61
user210794

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

34
avatar

Il est léger par rapport à XML. Si vous devez évoluer, réduisez vos besoins en bande passante!

Comparez 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"
      }
 ]

au format XML:

 <colors>
      <color >
           <name>red</name>
           <value>#f00</value>
      </color>
      <color >
           <name>green</name>
           <value>#0f0</value>
      </color>
      <color >
           <name>blue</name>
           <value>#00f</value>
      </color>
      <color >
           <name>cyan</name>
           <value>#0ff</value>
      </color>
      <color >
           <name>Magenta</name>
           <value>#f0f</value>
      </color>
      <color >
           <name>yellow</name>
           <value>#ff0</value>
      </color>
      <color >
           <name>black</name>
           <value>#000</value>
      </color>
 </colors>
31
Ron Gejman

Juste une anecdote de ma propre 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 contre 1200-1300 ms pour afficher toutes les données). En outre, comme d'autres l'ont noté, le JSON est beaucoup plus facile pour les yeux et la taille du fichier était 25% plus petite en raison du balisage plus léger.

28
Nate B
 <colors>
      <color name='red'     value='#f00'/>
      <color name='green'   value='#0f0'/>
      <color name='blue'    value='#00f'/>
      <color name='cyan'    value='#0ff'/>
      <color name='Magenta' value='#f0f'/>
      <color name='yellow'  value='#ff0'/>
      <color name='black'   value='#000'/>
 </colors>

Avec des attributs, XML est sympa. Mais pour une raison quelconque, le XML fait maison est généralement composé à 100% d'éléments et laid.

20
Marc

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

18
Xinus

JSON est le meilleur pour la consommation de données dans les applications Web à partir de services Web pour sa taille et sa facilité d'utilisation, notamment en raison de la prise en charge intégrée dans JavaScript . Imaginez la surcharge de calcul pour analyser un fragment xml par rapport à la recherche instantanée dans JSON.

Un très bon exemple est JSON-P. Vous pouvez récupérer les données d'un service Web enveloppé dans un appel de fonction de rappel, comme my_callback({"color": "blue", "shape":"square"}); à l'intérieur d'une balise <script> Générée dynamiquement afin que les données puissent être directement consommées dans la fonction my_callback(). Il n'y a aucun moyen de se rapprocher encore 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 des fichiers de configuration d'application pour plus de lisibilité parmi de nombreuses autres utilisations.

10
Joy Dutta

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

  • JSON est parfait pour ajax, surtout si vous développez vous-même côté serveur et côté client. Vous créez essentiellement des objets 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 sa partie des mois avant une autre, il est donc vraiment avantageux de valider ses demandes par rapport au XSD convenu. De plus, dans les grandes entreprises, le transfert de données est souvent traduit entre différents systèmes. C'est aussi la force de XML, pensez XSLT. Exemple: conversion sans code en JSON: p

Bien sûr, un schéma json est en cours de développement, mais vous ne trouverez nulle part une prise en charge intégrée.

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

8
A.P.

Maintenant qu'il existe des encodeurs et des décodeurs JSON pour la plupart des langues, il n'y a aucune raison de NE PAS utiliser JSON pour des utilisations où cela a 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.

6
Nosredna

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

5
Christian

Honnêtement, il n'y a pas tellement de différences 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 cela le rend plus lourd que JSON.

5
JasCav

Les deux sont super et très portables. Cependant, JSON a gagné en popularité car il 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 puisqu'il correspond à la syntaxe de l'objet JavaScript, il peut être directement traduit en un objet en mémoire qui fait Ajax beaucoup plus facile à implémenter.

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

4
Adam

Analysé facilement par JavaScript et il est léger (un document en JSON est plus petit qu'un document XML qui contient les mêmes données.)

4
Hannoun Yassir

JSON est en fait du JavaScript sérialisé en ce sens que vous pouvez évaluer (aJsonString) directement dans un objet JavaScript. À l'intérieur d'un navigateur, c'est un JSON simple qui convient parfaitement à JavaScript. Dans le même temps, JavaScript est un langage dynamique de type très lâche et ne peut pas exploiter nativement toutes les informations de type spécifiques disponibles contenues dans un document Xml/Xsd. Ces métadonnées supplémentaires (ce qui est idéal pour l'interopérabilité) est une gêne dans JavaScript, ce qui rend son travail plus fastidieux et encombrant.

Taille vs performances

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 encore pris en charge nativement. J'ai quelques benchmarks de base de données 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 son JSON. Bien que cela ait plus à voir avec l'effort que Microsoft a mis dans leur sérialiseur XML car j'ai pu développer un JsonSerializer qui est plus que 2.6x plus rapide que leur XML. En ce qui concerne les charges utiles basées sur les benchmarks, il semble que XML soit à peu près supérieur à 2x la taille de JSON. Cependant, cela peut rapidement exploser si votre charge utile XML utilise de nombreux espaces de noms différents dans le même document.

3
mythz

XML est l'huile de serpent gonflée dans la plupart des situations. JSON vous offre la plupart des avantages sans ballonnement.

2
just somebody

Un avantage majeur autre que ceux mentionnés ici. Pour les mêmes données, il existe plusieurs façons de le représenter sous forme de fichier XML, mais une seule avec JSON, supprime l'ambiguïté :)

1
Jaseem

Je ne suis pas un expert de loin, mais parmi 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 voudrez généralement faire rapport sur ces données. Et XML n'est pas une excellente source de rapports. Dans le grand schéma des choses, il semble qu'une base de données transactionnelle soit plus facile à signaler/rechercher que XML.

Est-ce que ça a du sens? Comme je l'ai dit plus haut, je ne suis pas un expert mais d'après mon expérience, cela semble être le cas. De plus, je crois que Microsoft a pris en charge JSON intégré en raison de la vague de développeurs qui se tournent vers des actions côté client ou scriptées pour améliorer les visuels de l'interface utilisateur ( Ajax ) et Ajax de Microsoft n'a pas été utilisé autant que d'autres bibliothèques comme jQuery et MooTools (Yahoo's YUI est également dans ce mélange) en raison de leur belle intégration d'objets sérialisables à l'aide de JSON.

Je me retrouve à écrire du code implémentant maintenant le sérialiseur JSON dans mon VB. C'est BEAUCOUP trop facile et d'un point de vue de mise à niveau/modification, vous ne pouvez pas le battre. C'est la façon de Microsoft de nous garder accro vers VS je suppose. J'ai récemment converti une application d'entreprise en utilisant Ajax (via jQuery) et en utilisant le format JSON. Cela a pris environ 2 semaines pour le faire. Je remercie en fait Microsoft de l'intégrer car sans lui, j'aurais dû écrire un peu de code supplémentaire.

0
clockwiseq