web-dev-qa-db-fra.com

Quand préférer JSON à XML?

Mon exigence est simplement d'afficher un ensemble de valeurs récupérées de la base de données sur une propagation. J'utilise jquery.

146
sarego

Privilégiez XML à JSON lorsque l'une de ces conditions est vraie:

  • 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 sur XML lorsque toutes ces conditions sont vraies:

  • Les messages n'ont pas besoin d'être validés, ou la validation de leur désérialisation est simple
  • Vous ne transformez pas de messages ou transformez leur désérialisation est simple
  • Vos messages sont principalement des données, pas du texte balisé
  • Les points de terminaison de messagerie disposent de bons outils JSON
149
Robert Rossney

J'utilise JSON sauf si je dois utiliser XML. C'est plus simple à comprendre et (parce qu'il nécessite moins de temps 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 assez omniprésentes maintenant.

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 90% des implémenteurs ont choisi JSON.

81
dkretz

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 devez écrire moins de code côté client - juste eval() (ou, mieux encore, JSON.parse()) la chaîne JSON et obtenir un objet que vous pouvez utilisation.

  • Dans le même temps, l'évaluation du 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 câble et améliorera les performances à cet égard.

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

15
urig

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 services JSON ou plus, il pourrait y avoir des conflits potentiels d'espace de noms. 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.

13
null

Habituellement, 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 blocs 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 difficile de le réécrire avec JSON pour certaines raisons.
    • Vous devez renvoyer ces données au format XML après un léger traitement à l'aide de la saisie de l'utilisateur.

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

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

11
Eugene Lazutkin

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.

8
Tejasvi

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 objet Javascript. En fait, vous pouvez convertir les données JSON en un objet Javascript en utilisant eval . XML devrait être traversé manuellement par vous (je ne sais pas comment cela fonctionne en Javascript, mais c'est difficile/plus ennuyeux dans la plupart des langues avec lesquelles j'ai utilisé des bibliothèques XML).

8
strager

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

En fait, je pense que vous pouvez tirer 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 Dates, heures, énumérations, types définis par l'utilisateur et même héritage de types, etc. SOAP s'appuie efficacement sur l'ensemble des fonctionnalités XML pour fournir une manière normalisé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 signifie qu'il peut être plus fastidieux de développer avec, 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 procurations client prenant une partie du fardeau lorsque vous essayez d'interagir avec des services externes (même si en même temps je trouve que les mandataires générés sont eux-mêmes un fardeau lorsqu'ils traitent avec des services Web qui changent fréquemment).

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.

Pour tous ses avantages, XML comporte é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. Le fait d'avoir différents espaces de noms dans le même document signifie la plupart du 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, la rendant plus verbeuse qu'elle ne devrait l'être. Avoir la possibilité de générer des attributs ainsi que des éléments signifie que vos classes ne correspondent pas bien à un document XML. Ces fonctionnalités à elles seules en font un programme peu adapté à la plupart des langues, ce qui le rend plus fastidieux et encombrant. Microsoft a reconnu et simplifié quelque peu cela dans son sérialiseur DataContract en supprimant les attributs XML et en ayant simplement les propriétés de votre mappage de classe aux éléments Xml uniquement.

JSON, d'autre part, est l'opposé complet de XML à bien des égards, car il est typé de manière très lâche 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 idéal lorsque vous essayez de communiquer au-delà des frontières linguistiques car vous devrez respecter certaines spécifications non standard hors bande si vous souhaitez prendre en charge des types plus spécifiques. À la hausse, son ensemble de fonctionnalités limité fait un bon ajustement programmatique à la plupart des langues - et est parfaitement adapté à JavaScript car une chaîne JSON peut être évaluée directement dans l'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 Microsofts XML et JSON. Fondamentalement, XML est plus de deux fois la taille de JSON, mais en même temps, il semble que Microsoft ait déployé beaucoup d'efforts pour optimiser son XML DataContractSerializer car il est plus de 30% plus rapide que son JSON. Il semble que vous deviez faire un compromis entre la taille et les performances. Pas content de ce fait, j'ai décidé d'écrire mon propre rapide JsonSerializer qui est maintenant 2,6 fois plus rapide que celui de MS - donc le meilleur des deux mondes :).

7
mythz

Je choisirais XML plutôt que JSON si j'ai besoin de valider le bloc de données entrantes, car XML le supporte nativement via XSD.

6
lowglider

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 croisement des étiquettes d'élément. Mélangez un bon de livraison et une facture, et tout à coup, l'adresse de l'expéditeur peut signifier quelque chose de très différent. C’est pourquoi XML possède des espaces de noms .

La conversion entre différentes structures JSON nécessiterait l'écriture de code banal. Une façon plus déclarative de mapper les données faciliterait la tâche. C’est pourquoi XML possède [~ # ~] xslt [~ # ~] .

Décrire la structure d'un paquet JSON - ses champs, types de données, etc. - est nécessaire pour que les gens se connectent à vos services. Il est essentiel d'avoir un langage de métadonnées pour cela. C’est pourquoi XML a Schémas .

La poursuite de deux conversations client-serveur simultanées prend soin. Si vous posez deux questions au serveur et obtenez une réponse, comment savez-vous à quelle question il répond? C’est pourquoi XML a WS-Correlation .

3
Özgür

De la première ligne à http://json.org/xml.html

Le langage de balisage extensible (XML) est un format de texte dérivé du langage de balisage généralisé standard (SGML). Comparé à SGML, XML est simple. En comparaison, le langage de balisage HyperText (HTML) est encore plus simple. Même ainsi, un bon livre de référence sur HTML a un pouce d'épaisseur. En effet, le formatage et la structuration des documents est une entreprise compliquée. . . .

Clairement, 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.

2
user3389057

JSON est le codage natif pour javascript. Il devrait être beaucoup plus rapide et plus facile à utiliser.

2
Dustin

J'ai trouvé cet article sur Digital Bazaar vraiment intéressant.

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

À propos des professionnels JSON:

Si tout ce que vous souhaitez faire circuler sont des valeurs atomiques ou des listes ou des hachages de valeurs atomiques, JSON a de nombreux avantages de 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 gère remarquablement bien toute 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 à rentrer un "je vous l’ai dit!" jeton dans mon bureau. J'ai hâte de voir ce que font les gens JSON lorsqu'ils sont invités à développer des API plus riches. Quand ils veulent échanger des données moins bien structurées, les transforment-ils en JSON? Je vois des mentions occasionnelles d'un langage de schéma pour JSON, d'autres langues suivront-elles? ...

1
Christian Vielma

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 des 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.

1
MoizNgp

Utilisation de JSON

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

Utilisation de XML

  • Surtout dans un environnement SOA où vous intégrez plusieurs services sur des plateformes et technologies hétérogènes.
  • SOAP a l'avantage de pouvoir être transmis via différents protocoles autres que HTTP.
  • Facile à utiliser dans l'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 (XQuery) les données XML.
  • 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.
1
Rohitdev

Règles rapides:

  • JSON: format de données programme à programme
  • YAML (sur-ensemble JSON): format de données homme à 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 à cet effet, il ne peut vraiment pas être battu ou amélioré. A savoir "JSON n'a pas de numéro de version [car] aucune révision de la grammaire JSON n'est prévue". - Douglas Crockford (Ne peut pas battre cela comme un signe que vous faites votre travail parfaitement)

XML était autrefois vendu comme un format d'échange de données, mais considérez les deux cas d'utilisation les plus courants: Communication client-serveur asynchrone (AJAX) - JSON a à peu près entièrement remplacé XML (le X devrait vraiment être un J), et 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 accessibles en écriture/en lecture (?) Pour les programmes, mais ici aussi, vous avez un format plus concis, plus convivial pour les programmes et plus convivial pour YAML, un sur-ensemble JSON.

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

1
Yarin

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 baliser sémantiquement des données de type document.

1
Lawrence Dol

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

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

0
xmorera