Pourquoi tout le monde choisit-il JSON plutôt que XML pour jQuery? [fermé]

155

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 au JSON . Même Microsoft a intégré la prise en charge de JSON. Qu'est-ce que tout le battage médiatique sur JSON?

Luc101
la source
14
"tout le monde" et "partout" sont des termes absolus ...
Matthew Groves
73
@eliben XML n'est pas vraiment nul. C'est très puissant, mais tout comme la chasse aux lapins avec un lance-roquettes, ce n'est peut-être pas toujours la meilleure option.
Dan
20
La plupart de ce pour quoi les gens utilisent actuellement XML serait mieux dans JSON
MGOwen
39
@Dan Si seulement XML était aussi amusant que de chasser des lapins avec un lance-roquettes (probablement - je ne peux pas dire que je l'ai essayé moi-même)
David Johnstone
4
parce que c'est `` l'alternative sans gras à XML '' -json.org
DMin

Réponses:

226

Fondamentalement, parce que 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, ceci est réalisé sous la forme d'un objet, enregistrement, struct, dictionnaire, table de hachage, liste à clé ou tableau associatif.
  • Une liste ordonnée de valeurs. Dans la plupart des langues, cela est réalisé sous forme de tableau, de vecteur, de liste ou de séquence.
CMS
la source
3
+1 .. vraiment .. la prise en charge de nombreux types de données est très importante par rapport au texte XML brut
Xinus
48
+1, d'autant plus que l'analyse JSON est incroyablement plus efficace que l'analyse XML, même par morceaux. Une fois que les ensembles de données qui vous intéressent dépassent un certain seuil (et terriblement petit), la différence de performances est perceptible.
Magsol
1
Quelqu'un me montre des données qui indiquent que l'analyse JSON est plus rapide que XML dans les navigateurs modernes. Une réponse sur SO ici dit le contraire: stackoverflow.com/questions/4596465/…
HDave
136

XML ne commence vraiment à briller que lorsque vous commencez à mélanger différents schémas d'espacement 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.

jcdyer
la source
31
+1 pour montrer à quoi XML est vraiment utile. Trop souvent, les gens utilisent XML même lorsqu'ils pourraient se débrouiller avec quelque chose de beaucoup plus simple.
Daniel Pryden
1
Ouais va devoir être d'accord avec jcd et Daniel ici. Réponse de qualité sur les raisons pour lesquelles XML est toujours assez bon pour certaines choses.
knowncitizen
3
Comment XML est moins lisible, je trouve qu'il est presque impossible de lire json où je pense que la hiérarchie de XML est beaucoup plus compréhensible (certainement un peu verbeuse). Peut-être que je n'ai tout simplement pas assez travaillé avec JSON
Colton
Les espaces de noms sont une solution xml pour résoudre certains problèmes lorsque vous faites des choses avec XML. Si vous utilisez json, trouvez une solution json pour résoudre ces mêmes problèmes de la manière json. Pour moi, l'argument des espaces de noms est juste comme "Oh! Mais json n'a pas d'attributs!"
redben
61

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.

user210794
la source
34

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 imbriquées ... vous allez rencontrer]]]}], ce qui rend le débogage difficile

avatar
la source
31

C'est léger par rapport au XML. Si vous avez besoin d'é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"
      }
 ]

vers 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>
Ron Gejman
la source
23
pas seulement plus petit, mais plus convivial pour les humains. XML ressemble à une mauvaise tentative d'un humain de parler comme un ordinateur.
deft_code
15
Votre XML peut également réduire le XML avec des attributs au lieu d'éléments pour les types simples (nom / valeur)
Matthew Whited
4
@Matthew: Oui, mais ça a l'air incohérent et moche. Et vous avez toujours besoin de balises d'ouverture / fermeture pour l'élément. JSON (au mieux) divise par deux le nombre de balises que vous devez utiliser.
Ron Gejman
2
Regardez l'exemple de Marc. Je ne vois pas comment votre version est plus facile à lire que la sienne. stackoverflow.com/questions/1743532/…
Matthew Whited
1
la différence est la longueur ne me semble pas si grande
vtd-xml-author
28

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 que je puisse 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). De plus, comme d'autres l'ont noté, le JSON est beaucoup plus facile pour les yeux et la taille du fichier était bien 25% plus petite en raison du balisage plus léger.

Nate B
la source
2
Si tout le monde créait ces benchmarks, nous n'aurions rien à redire.
HDave
20
 <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 les attributs, XML est sympa. Mais pour une raison quelconque, le XML fait maison est généralement composé à 100% d'éléments et moche.

Marc
la source
2
C'est encore plus de caractères non blancs que l'exemple JSON. Et l'analyse des attributs peut être plus ennuyeuse en XML.
jmucchiello
4
Probablement parce que les types complexes ne peuvent vraiment être décrits que dans des éléments de sorte que la plupart des outils par défaut. Je reconnais que ce XML est très simple à utiliser et à lire.
Matthew Whited
18

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

Xinus
la source
6
C'est la principale raison pour laquelle je l'utilise. L'analyse manuelle de XML est extrêmement complexe. De plus, comme j'utilise Python pour créer le JSON en premier lieu, ils gèrent les données et les objets de manière très similaire, ce qui signifie que la sérialisation dans les deux sens rend tout heureux!
RandomInsano
10

JSON est idéal pour la consommation de données dans les applications Web à partir de services Web en raison de sa taille et de sa facilité d'utilisation, en particulier en raison de la prise en charge intégrée de 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 des données à partir d'un service Web enveloppé dans un appel de fonction de rappel, comme my_callback({"color": "blue", "shape":"square"});dans une <script>balise 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 de cette commodité en utilisant XML.

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

Joy Dutta
la source
8

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 le côté serveur et client. Vous créez essentiellement des objets js directement dans votre script serveur!
  • XML brille dans les environnements d'entreprise, lorsque vous devez définir des normes d'échange de données entre de grandes organisations bureaucratiques. Souvent, une partie développe sa partie des mois avant une autre, donc elle profite vraiment de la validation de 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, json-schema est en cours de développement, mais vous ne trouverez aucun support intégré pour celui-ci.

Je suis fan des deux, ils ont juste des atouts différents.

AP
la source
6

Maintenant qu'il existe des encodeurs et décodeurs JSON pour la plupart des langages, 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.

Nosredna
la source
5

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 volumineux que JSON et cela le rend plus lourd que JSON.

JasCav
la source
1
Je n'ai pas trouvé votre réponse particulièrement inspirante, mais ce n'était pas faux, donc un vote négatif semblait injuste.
deft_code
+1 pour indiquer que XML peut être utilisé de manière à constituer un sur-ensemble approprié de JSON.
Sebastian
5

JSON n'a pas de discordance 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.

Christian
la source
La nécessité d'analyser les éléments n'équivaut pas à une non-concordance d'impédance.
Rob
9
Une discordance d'impédance se produit lorsque les concepts ne mappent pas proprement d'un format à un autre, comme avec le mappage relationnel objet. Certaines choses sont très faciles à exprimer avec des objets mais difficiles avec SQL tandis que d'autres sont faciles à exprimer avec SQL, mais les hiérarchies d'objets ont du mal à les exprimer clairement. Avec XML et JSON, l'un nécessite souvent un peu plus de travail pour obtenir le sens que l'autre, mais cela dépend vraiment des outils d'analyse. L'expressivité est (pour la plupart) la même.
jcdyer
4

Les deux sont excellents 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 comme il correspond à la syntaxe de l'objet JavaScript, il peut être directement traduit en un objet en mémoire, ce qui rend Ajax beaucoup plus facile à mettre en place.

XML est toujours excellent. JSON est juste le "dernier et meilleur" par rapport au XML.

Adam
la source
1
Et je crois que les nouvelles révisions de JavaScript commencent à inclure des encodeurs et décodeurs JSON intégrés "sûrs" (sans eval).
Nosredna
4

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

Hannoun Yassir
la source
3

JSON est effectivement du JavaScript sérialisé en ce sens que vous pouvez évaluer (aJsonString) directement dans un objet JavaScript. À l'intérieur d'un navigateur, il est évident que JSON est parfaitement adapté à JavaScript. Dans le même temps, JavaScript est un langage dynamique très faiblement typé et ne peut pas tirer parti nativement de 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 un obstacle à JavaScript, ce qui le rend plus fastidieux et plus complexe à utiliser.

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 surtout 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 plus de 30% plus rapide que leur JSON. Bien que cela ait plus à voir avec l'effort que Microsoft a déployé dans son sérialiseur XML, j'ai pu développer un JsonSerializer qui est plus de 2,6 fois plus rapide que son XML. Quant aux charges utiles basées sur les benchmarks, il semble que XML soit à peu près plus de 2xla 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.

Mythz
la source
2

XML est une huile de serpent gonflée dans la plupart des situations. JSON vous offre la plupart des avantages sans gonflement.

juste quelqu'un
la source
1

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

Jaseem
la source
2
{"colors":["red","green","blue"],"systems":["windows","mac"]}vs{"entries":[{"type":"color","value":"red"},{"type":"system","value":"mac"}]}
Jerome Baum
0

Je ne suis de loin pas un expert, mais parmi les différentes entreprises 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 disposez de grandes quantités de données, vous souhaiterez généralement créer un 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 à rapporter / 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 pense que Microsoft a intégré le support JSON en raison de la vague de développeurs passant aux 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é autant utilisé que d'autres bibliothèques comme jQuery et MooTools ( YUI de Yahoo 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 code VB. C'est bien trop facile et du point de vue de la mise à niveau / modification, vous ne pouvez pas le battre. C'est la manière de Microsoft de nous garder accro au 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'avoir intégré car sans lui, j'aurais dû écrire pas mal de code supplémentaire.

dans le sens des aiguilles d'une montreq
la source
Je pense qu'il y avait une certaine confusion sur la question et cette réponse contient beaucoup de spéculations.
marr75
@Eric P: absolument rien de mal avec VB.
Taptronic