Quand préférer JSON au XML?

148

Mon exigence est simplement d'afficher un ensemble de valeurs extraites de la base de données sur un spread. J'utilise jquery.

sarego
la source

Réponses:

149

Privilégiez XML par rapport à JSON lorsque l'un de ces éléments est vrai:

  • Vous avez besoin d'une validation de message
  • Vous utilisez XSLT
  • Vos messages contiennent beaucoup de texte balisé
  • Vous devez interagir avec des environnements qui ne prennent pas en charge JSON

Privilégiez JSON par rapport à XML lorsque tout cela est vrai:

  • Les messages n'ont pas besoin d'être validés, ou la validation de leur désérialisation est simple
  • Vous ne transformez pas les messages ou ne transformez pas leur désérialisation est simple
  • Vos messages sont principalement des données, pas du texte balisé
  • Les points de terminaison de messagerie ont de bons outils JSON
Robert Rossney
la source
9
JSON n'offre aucun avantage sur XML dans la gestion du texte balisé. Mais je vois votre point; c'est peut-être exagéré.
Robert Rossney
10
Lorsque toutes les conditions sont égales, privilégiez JSON pour deux raisons: JSON est beaucoup plus léger à analyser que XML (CPU friendly) et nécessite beaucoup moins de données à transférer (Network friendly).
Roger Barreto
Quand utiliseriez-vous XSLT sans utiliser XML? XML est une donnée si vous utilisez déjà XSLT. Cela ne devrait pas soutenir l'argument d'utiliser XML. C'est comme dire utiliser JSON si vous utilisez JSON.parse (). De plus, je dirais qu'il est plus facile de transformer un objet JSON que d'écrire une transformation XSLT, mais cela pourrait être mon parti pris personnel.
Spencer
Je ne suis pas entièrement d'accord avec la partie validation dans JSON. JSON est également validable. Vérifiez ce brouillon de l'IETF: lien C'est un brouillon mais quand même ..
Sotn
@sotn Vous n'avez pas PL / SQL pour JSON comme XML (par exemple XQuery). C'est la base de certaines bases de données NoSQL (eXist, MarkLogic Server, EMC Documentum xDB, BaseX, Zorba)
Dmytro Melnychuk
81

J'utilise JSON sauf si je suis obligé d'utiliser XML. C'est plus simple à comprendre et (parce que cela nécessite moins de frais de configuration), il est plus facile de programmer pour la lecture et l'écriture si les bibliothèques sont disponibles dans votre contexte, et elles sont maintenant assez omniprésentes.

Lorsque Amazon a exposé ses catalogues pour la première fois en tant que service Web, ils ont proposé à la fois JSON et XML. Quelque chose comme 90% des implémenteurs ont choisi JSON.

dkretz
la source
56
"J'utilise JSON sauf si je suis obligé d'utiliser XML." ~ Exactement.
EndangeredMassa
2
La question la plus profonde est donc "Pour quelles raisons seriez-vous obligé d'utiliser XML?" Ces raisons sont-elles idiotes? ou reflètent-ils simplement des préoccupations différentes, d'un point de vue différent du vôtre?
13ren le
5
Plusieurs raisons possibles, y compris les logiciels existants, je ne veux pas réécrire. Mais le plus important est d'utiliser XML comme format d'échange de données où je ne contrôle pas les deux extrémités, ou il existe une norme formelle qui s'applique et nécessite XML. Je ne peux choisir arbitrairement que lorsque je suis le seul développeur impliqué.
dkretz
15

Compte tenu de votre cas spécifique où vous faites déjà du javascript côté client, j'irais avec JSON pour ces raisons:

  • Étant donné que JSON est natif de javascript, vous devrez écrire moins de code côté client - Il suffit eval()(ou, mieux encore, JSON.parse()) de la chaîne JSON et d'obtenir un objet que vous pouvez utiliser.

  • Dans le même temps, l'évaluation de JSON côté client sera plus efficace et donc plus rapide.

  • La sérialisation JSON produit des chaînes plus courtes que XML. L'utilisation de JSON réduira la quantité de données exécutées sur le réseau et améliorera les performances à cet égard.

Voici quelques lectures supplémentaires: http://www.subbu.org/blog/2006/08/json-vs-xml

urig
la source
7
est- eval()ce que JSON n'est pas un grand non-non?
shoosh
@Shy, le propre site de JSON dit que vous pouvez utiliser eval sur JSON (avec des parenthèses entourées): json.org/js.html
strager
9
Tiré de json.org: La fonction eval est très rapide. Cependant, il peut compiler et exécuter n'importe quel programme JavaScript, il peut donc y avoir des problèmes de sécurité. L'utilisation d'eval est indiquée lorsque la source est fiable et compétente. Il est beaucoup plus sûr d'utiliser un analyseur JSON
sarego
2
Préférez JSON.parse () à eval ().
Havvy
14

Quelques autres choses que j'ai rencontrées dans le relm XML vs JSON:

JSON est très bon pour

  • paires nom / valeur
  • imbriquer ces paires

Ce qui signifie qu'il a tendance à aimer un tableau ou un tableau imbriqué. Cependant, JSON manque les deux

  • les attributs
  • espace de noms

Donc, si vous deviez combiner deux ou plusieurs services JSON, il pourrait y avoir des conflits d'espace de noms potentiels. Cela étant dit, JSON peut être utilisé pour environ 90% des mêmes choses que XML peut être utilisé lors de l'échange de données selon mon expérience.

nul
la source
Un autre problème de Json est que vous ne pouvez pas fusionner facilement deux messages json pour créer un nouveau message json. Il ne sera généralement pas bien formé ..
vtd-xml-author
7
Pourquoi auriez-vous besoin d'attributs? Si votre élément contient d'autres valeurs, faites-en un objet - les membres sont vos "attributs". Franchement, je pense que les attributs bifuraux / la structure de conteneur de XML sont entièrement préjudiciables.
foo le
Je dirais que JSON n'a pas d'attributs est une fonctionnalité.
brian
11

En général, JSON est plus compact et plus rapide à analyser.

Préférez XML si:

  • Vous devez traiter les données sur le client et vous pouvez utiliser XSL pour cela. Il est probable que la chaîne XML + XSL fonctionnera plus rapidement que JSON + JavaScript, en particulier pour les gros morceaux de données.
    • Un bon cas est de convertir les données en un extrait HTML.
  • Divers cas hérités:
    • Il existe un service XML existant et il est compliqué de le réécrire avec JSON pour certaines raisons.
    • Vous devez publier ces données au format XML après un léger traitement en utilisant l'entrée de l'utilisateur.

Un cas important de (presque) XML: essayer de détecter lors de l'envoi d'extraits de code HTML est plus avantageux que d'envoyer des données brutes. AH AH peut faire des merveilles dans des applications simples, mais souvent négligées. Habituellement, ce style suppose qu'un serveur envoie des extraits de code HTML qui seront incorporés dans la page Web sans traitement.

Habituellement, dans les cas AHAH, CSS est exploité au maximum pour masser visuellement les extraits de code et implémenter des conditions simples comme le masquage / l'affichage des parties pertinentes de l'extrait à l'aide de paramètres spécifiques à l'utilisateur ou à l'application.

Eugène Lazutkin
la source
8

JSON est facile et plus rapide à analyser. XML est un peu plus difficile à analyser et est plus lent à analyser et à transférer (dans la plupart des cas).

Puisque vous utilisez jQuery, je suggère d'utiliser JSON: jQuery peut récupérer des données JSON et les convertir automatiquement en un objet Javascript. En fait, vous pouvez convertir des données JSON en un objet Javascript en utilisant eval . XML devrait être transversé manuellement par vous (je ne sais pas comment cela fonctionne en Javascript, mais c'est difficile / plus ennuyeux dans la plupart des langages avec lesquels j'ai utilisé des bibliothèques XML).

strager
la source
1
JSON est par définition un objet JavaScript, jQuery ne fait vraiment rien de spécial "conversion". Je pensais juste que cela devrait être clarifié.
Brian Gianforcaro
5
JSON n'est pas un objet javascript sauf s'il est instancié en javascript. Il se trouve qu'il suit le format utilisé pour la sérialisation des objets javascript, mais il est accessible (avec les modules complémentaires et intégrés appropriés) à partir de la plupart des langages, au moins aussi facilement que XML.
dkretz
@Gianforcaro, je m'en rends compte. Je vais modifier mon message pour l'indiquer plus clairement. @doofledorfer, j'ai dit "et convertissez-le en un objet Javascript". Je n'ai pas dit que les données JSON étaient un objet Javascript.
strager
Ah, désolé, je n'ai pas compris ça.
strager
8

JSON est toujours préférable en termes de traitement que le navigateur client doit effectuer pour analyser les données. En outre, JSON est un format d'échange de données léger.

L'analyse XML consomme toujours beaucoup de ressources du navigateur et doit être évitée autant que possible, sauf indication contraire.

Tejasvi
la source
7

J'ai un article de blog sur le sujet détaillant l'historique des protocoles web (ie SOAP, XML, JSON, REST, POX, etc.) fournissant un résumé ainsi que quelques avantages et inconvénients de chacun: http://www.servicestack.net / mythz_blog /? p = 154

Je pense en fait que vous pouvez dessiner de nombreuses similitudes entre XML et JSON en comparant les différences entre les langages dynamiques (JSON) et statiques (XML).

Fondamentalement, XML est un format de sérialisation plus strict et plus rigide qui peut éventuellement être vérifié avec un schéma d'accompagnement (qui est soit un XSD soit un DTD). Les XSD sont assez élaborés et vous permettent de décrire de nombreux types différents, par exemple les dates, les heures, les énumérations, les types définis par l'utilisateur et même l'héritage de types, etc. SOAP s'appuie efficacement sur l'ensemble de fonctionnalités XML en fournissant une manière standardisée de décrire vos services Web ( par exemple types et opérations) via un WSDL. La verbosité et la complexité de la spécification WSDL signifient qu'elle peut être plus fastidieuse à développer, mais en même temps, il y a beaucoup plus d'outils à votre disposition et la plupart des langages modernes fournissent des outils automatisés pour générer vos proxys client en prenant une partie du fardeau désactivé lorsque vous essayez d'interagir avec des services externes.

Je recommanderais toujours d'utiliser XML pour vos services Web si vous avez un «service d'entreprise» bien défini qui n'est pas soumis à des changements fréquents ou si votre service Web doit être accessible à partir de nombreuses langues différentes.

Malgré tous ses avantages, XML présente également des inconvénients. Il s'appuie sur des espaces de noms afin de fournir un format extensible typé et vous permet de spécifier des attributs et des éléments dans le même document. Avoir des espaces de noms différents dans un même document signifie beaucoup de temps lorsque vous utilisez un analyseur Xml pour extraire des données, vous devrez également fournir l'espace de noms de chaque élément que vous souhaitez récupérer / parcourir. Il extrapole également la charge utile, ce qui la rend plus verbeuse que nécessaire. Avoir la possibilité de générer des attributs ainsi que des éléments signifie que vos classes ne correspondent pas parfaitement à un document XML. Ces fonctionnalités à elles seules en font un programme mal adapté à la plupart des langages, ce qui le rend plus fastidieux et compliqué à utiliser.

JSON, d'un autre côté, est complètement l'opposé de XML à bien des égards car il est très peu typé et ne prend en charge que les types de base: Number, Bool, string, Objects et Arrays. Tout le reste doit essentiellement tenir dans une chaîne. Ce n'est pas génial lorsque vous essayez de communiquer au-delà des frontières linguistiques, car vous devrez vous conformer à certaines spécifications non standard hors bande si vous souhaitez prendre en charge des types plus spécifiques. Sur le plan positif, son ensemble de fonctionnalités limité convient parfaitement à la plupart des langages - et convient parfaitement à JavaScript, car une chaîne JSON peut être évaluée directement dans un objet JavaScript.

Taille et performances

J'ai quelques benchmarks de base de données Northwind disponibles comparant la taille et la vitesse entre les implémentations Microsoft XML et JSON. Fondamentalement, XML fait plus de deux fois la taille de JSON, mais en même temps, il semble que Microsoft a déployé beaucoup d'efforts pour optimiser son DataContractSerializer XML car il est plus de 30% plus rapide que son JSON. Il semble que vous deviez faire un compromis entre la taille et la performance. Pas content de ce fait, j'ai décidé d'écrire mon propre JsonSerializer rapide qui est maintenant 2,6x plus rapide que celui de MS XML - donc le meilleur des deux mondes :).

Mythz
la source
6

Je choisirais XML plutôt que JSON si je dois valider le bloc de données entrantes, car XML prend en charge nativement cela via XSD.

planeur bas
la source
3

de JSON - les derniers pieds

Lorsque vous suivez la route JSON, vous rencontrez les mêmes problèmes que XML rencontrés il y a 10 ans:

Le mélange de données provenant de deux sources différentes dans un seul paquet JSON peut provoquer le choc des étiquettes d'élément. Mélangez un bon de livraison et une facture, et soudain, l'adresse d'expédition peut signifier quelque chose de tout à fait différent. C'est pourquoi XML a des espaces de noms .

La conversion entre différentes structures JSON nécessiterait l'écriture de code banal. Une manière plus déclarative de mapper les données faciliterait la tâche. C'est pourquoi XML a XSLT .

La description de la structure d'un paquet JSON (ses champs, ses types de données, etc.) est nécessaire pour permettre aux utilisateurs de se connecter à vos services. Il est essentiel d'avoir un langage de métadonnées pour cela. C'est pourquoi XML a des schémas .

Il faut faire preuve de prudence lors de deux conversations client-serveur simultanées. Si vous posez deux questions au serveur et obtenez une réponse, comment savoir à quelle question il répond? C'est pourquoi XML a WS-Correlation .

Özgür
la source
2
Les espaces de noms ne sont qu'une autre solution de contournement; vous pouvez faire la même chose en JSON si vous le souhaitez. La corrélation WS a également été ajoutée après coup à XML et n'est pas "intégrée". Vous pouvez également l'ajouter à JSON. La description de la structure (schémas) n'est pas spéciale pour XML; vous pouvez le faire de plusieurs façons dans n'importe quel langage formel depuis l'invention d'eBNF. XSLT est cependant un argument de vente valable.
toto le
2

JSON est l'encodage natif pour javascript. Cela devrait être beaucoup plus rapide et plus facile à utiliser.

Dustin
la source
2

À partir de la première ligne à http://json.org/xml.html

Extensible Markup Language (XML) est un format de texte dérivé du Standard Generalized Markup Language (SGML). Comparé à SGML, XML est simple. Le langage HTML (HyperText Markup Language), par comparaison, est encore plus simple. Même ainsi, un bon livre de référence sur HTML mesure un pouce d'épaisseur. En effet, le formatage et la structuration des documents sont une entreprise compliquée. . . .

Il est clair que JSON est plus rapide, mais il est encore plus clair qu'il est difficile à lire. Utilisez JSON pour la vitesse, utilisez XML s'il y aura une interaction humaine et vous pouvez sacrifier la vitesse.


la source
2
Votre réponse n'apporte aucune nouvelle information ... Mais je suppose que c'est toujours vrai
1

J'utilise JSON pour tout type de configuration, d'échange de données ou de messagerie. J'utilise XML uniquement si je dois le faire pour d'autres raisons ou pour marquer sémantiquement des données de type document.

Lawrence Dol
la source
1

XML et JSON sont pris en charge par Microsoft. Les littéraux XML étaient la nouvelle fonctionnalité intéressante de VB 9. Dans la prochaine version d'ASP.NET 4.0, JSON est indispensable pour tirer parti de la puissance de la création de modèles côté client.

D'après la question que vous avez posée, il semble que JSON pourrait être le choix pour vous car il est facile à traiter côté client avec ou sans jQuery.

MoizNgp
la source
1

Utilisation de JSON

  • Si les données doivent être consommées par JavaScript dans le navigateur.
  • Le modèle de données est simple et pas complexe (trop d'objets composites).

Utilisation de XML

  • Principalement dans un environnement de type SOA où vous intégrez plusieurs services sur des plates-formes et des technologies hétérogènes.
  • SOAP a l'avantage de pouvoir être transmis via différents protocoles autres que HTTP.
  • Facile à utiliser dans un outil de transformation de modèle de données comme XSLT, XSL-FO, etc.
  • Beaucoup de support de base de données pour stocker / interroger des données XML (XQuery).
  • XML est un format de données très mature, vous trouverez donc de nombreux outils pour prendre en charge tous les cas d'utilisation auxquels vous pouvez penser.
Rohitdev
la source
1

J'ai trouvé cet article au bazar numérique vraiment intéressant.

Certaines parties de l'article sont citées ci-dessous.

À propos des pros JSON:

Si vous ne voulez transmettre que des valeurs atomiques ou des listes ou des hachages de valeurs atomiques, JSON présente de nombreux avantages du XML: il est facilement utilisable sur Internet, prend en charge une grande variété d'applications, il est facile d'écrire des programmes pour traiter JSON, il a peu de fonctionnalités optionnelles, il est lisible par l'homme et raisonnablement clair, sa conception est formelle et concise, les documents JSON sont faciles à créer et il utilise Unicode. ...

À propos des pros XML:

XML traite remarquablement bien la richesse des données non structurées. Je ne suis pas du tout inquiet pour l'avenir de XML, même si sa mort est joyeusement célébrée par un groupe de concepteurs d'API Web.

Et je ne peux pas résister à un "Je vous l'ai dit!" jeton dans mon bureau. J'ai hâte de voir ce que font les gens JSON quand on leur demande de développer des API plus riches. Lorsqu'ils veulent échanger des données moins bien structurées, vont-ils les utiliser dans JSON? Je vois des mentions occasionnelles d'un langage de schéma pour JSON, d'autres langages suivront-ils? ...

Christian Vielma
la source
Cette réponse et les extraits fournis dénaturent complètement la teneur de l'article cité, ce qui favorise fortement JSON. Les citations proviennent d'un tiers avec lequel l'auteur de l'article n'est pas d'accord. L'article cité est une très bonne lecture - donc pas de vote négatif sur cette réponse, malgré la fausse déclaration.
Lawrence Dol
1

Règles rapides:

  • JSON: format de données de programme à programme
  • YAML (sur-ensemble JSON): format de données humain-programme
  • XML: format de balisage de document

Explication:

Le seul rôle de JSON est de sérialiser les données orientées objet en utilisant les types de données communs à la plupart des langages de programmation: listes , hachages et scalaires , et dans ce but, il ne peut vraiment pas être battu ou amélioré. À savoir "JSON n'a pas de numéro de version [car] aucune révision de la grammaire JSON n'est prévue". - Douglas Crockford (Je ne peux pas battre cela comme un signe que vous faites parfaitement votre travail)

XML était autrefois vendu comme format d'échange de données, mais considérez les deux cas d'utilisation les plus courants: Communication client-serveur asynchrone (AJAX) - JSON a pratiquement entièrement remplacé XML (le X devrait vraiment être un J) et les services Web : JSON a fait de XML une alternative redondante.

L'autre chose pour laquelle XML a été largement utilisé était les fichiers de données inscriptibles / lisibles par l'homme (?) Pour les programmes, mais ici aussi vous avez un format plus concis, plus convivial pour les programmes et plus convivial dans YAML, un sur-ensemble JSON.

Donc, pour la représentation des données, JSON bat le XML dans tous les domaines. Que reste-t-il alors pour XML? Représentation de documents à contenu mixte, ce à quoi elle était destinée .

Yarin
la source
0

La plupart des nouvelles technologies Web fonctionnent avec JSON, donc définitivement une bonne raison d'utiliser JSON. Un grand avantage est que dans XML, vous pouvez représenter les mêmes informations de plusieurs manières différentes, ce qui en JSON est plus simple.

JSON IMHO est également beaucoup plus clair que XML, ce qui en fait pour moi un avantage évident. Et si vous travaillez avec .NET, Json.NET est un gagnant clair pour vous aider à travailler avec JSON.

xmorera
la source