Comparaison JSON et XML [fermé]


273

Je veux savoir lequel est le plus rapide: XML et JSON? Quand utiliser lequel?


60
Plus vite où? Transmission? En traitement? Générateur? Les deux n'ont pas de pieds, vous savez. Il est probable que JSON soit "plus rapide" d'une manière ou d'une autre car il a moins de surcharge de balisage. De l'autre côté, XML fournit XMLSchema pour garantir les types, la structure ... donc la validité. Il y a XSLT pour transformer XML dans presque n'importe quel autre format de sortie ... Cela dépend de ce dont vous avez besoin .
Felix Kling

2
Consultez également les autres questions posées précédemment: stackoverflow.com/search?q=json+vs+xml
Felix Kling

16
BLARG! C'est quelque chose que je voulais vraiment savoir, et j'étais vraiment content que ce soit ici, et les réponses étaient PARFAITES. MAUVAIS SUR VOUS , se modérateurs: il est peut-être temps d'étendre votre rage d'engagement. Bon pour vous d'avoir permis d'y répondre, au moins!
Mark Gerolimatos

Je me fiche que cet article soit extrêmement en retard, mais je suis d'accord. Si une question est dupe, non pertinente ou en conflit avec les conditions de service, peut-être (le fil fermé / inutile) ne devrait pas être la première chose qui apparaît dans une recherche. (btw, c'est le 2ème résultat [dupé] qui arrive) Je conviens que les réponses devraient peut-être être maigres et concises mais si le résultat après le résultat est un fil fermé et sans réponse rempli de commentaires hors sujet (ce qui est contraire aux conditions d'utilisation), alors ça n'aide personne.
Izaac Corbett

2
Bien que la question posée ne soit pas claire, il ne s'agit PAS d'une question d'opinion.
qwr

Réponses:


221

Avant de répondre quand utiliser lequel, un petit historique:

edit: je dois mentionner que cette comparaison est vraiment du point de vue de les utiliser dans un navigateur avec JavaScript. Ce n'est pas la façon dont l'un ou l'autre format de données doit être utilisé, et il y a beaucoup de bons analyseurs qui changeront les détails pour rendre ce que je dis pas tout à fait valide.

JSON est à la fois plus compact et (à mon avis) plus lisible - en transmission, il peut être "plus rapide" simplement parce que moins de données sont transférées.

Dans l'analyse, cela dépend de votre analyseur. Un analyseur transformant le code (que ce soit JSON ou XML) en une structure de données (comme une carte) peut bénéficier de la nature stricte de XML ( les schémas XML désambiguïsent bien la structure de données) - cependant en JSON le type d'un élément (String / Number / Nested JSON Object) peut être déduit syntaxiquement, par exemple:

myJSON = {"age" : 12,
          "name" : "Danielle"}

L'analyseur n'a pas besoin d'être suffisamment intelligent pour se rendre compte qu'il 12représente un nombre (et Danielleest une chaîne comme les autres). Donc en javascript on peut faire:

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

En XML, nous devons faire quelque chose comme ceci:

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(en passant, cela illustre le fait que XML est plutôt plus verbeux; une préoccupation pour la transmission de données). Pour utiliser ces données, nous les exécutions via un analyseur, puis nous devions appeler quelque chose comme:

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

En fait, un bon analyseur pourrait bien taper le agepour vous (d'un autre côté, vous pourriez ne pas le vouloir). Ce qui se passe lorsque nous accédons à ces données est - au lieu de faire une recherche d'attribut comme dans l'exemple JSON ci-dessus - nous faisons une recherche de carte sur la clé name. Il pourrait être plus intuitif de former le XML comme ceci:

<person name="Danielle" age="12" />

Mais nous aurions encore à faire des recherches de carte pour accéder à nos données:

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

EDIT: Original:

Dans la plupart des langages de programmation (pas tous, par n'importe quel tronçon), une recherche de carte comme celle-ci sera plus coûteuse qu'une recherche d'attribut (comme nous l'avons vu ci-dessus lorsque nous avons analysé le JSON).

C'est trompeur: rappelez-vous qu'en JavaScript (et dans d'autres langages dynamiques), il n'y a pas de différence entre une recherche de carte et une recherche de champ. En fait, une recherche de champ n'est qu'une recherche de carte.

Si vous voulez une comparaison vraiment valable, le mieux est de la comparer - faites les références dans le contexte où vous prévoyez d'utiliser les données.

Comme je l'ai tapé, Felix Kling a déjà mis en place une réponse assez succincte en les comparant en termes de moment à utiliser chacun, donc je n'irai pas plus loin.


Juste une note pédante ... Une recherche de champ JavaScript n'est pas nécessairement une recherche de carte. Cela dépend de l'objet et du champ en question. Les petits objets (en particulier ceux auxquels aucune propriété n'a été attachée après la construction) ont souvent utilisé des "types rapides" optimisés avec des caches en ligne dans les moteurs JS modernes, et retombent dans des sacs de propriétés plus lents (recherches de carte) pour les objets avec un grand nombre de propriétés ou les cas où une structure d'objets change fréquemment.
Brandon Paddock

2
Je trouve que JSON est plus facile à analyser pour les humains, mais XML est plus facile à analyser pour les ordinateurs.
Jus12

5
Ce n'est pas vrai, par exemple, en PHP, JSON utilise json.so sans dépendances à 78k, XML d'autre part, a besoin de xml.so ou xmlreader.so à 54k / 32k, mais nécessite également le libxml2.so qui 1.4megs . Plus de code rend le traitement et l'utilisation de mémoire plus longs. Sans oublier, XML, en raison de sa structure de nœuds / arborescences, a des références circulaires, ce qui peut être pénible dans n'importe quel langage qui n'a pas de références faibles. J'ai trouvé dans plusieurs langues que l'analyseur XML est beaucoup plus grand (prend plus de mémoire et utilise plus de mémoire) que n'importe lequel de ses homologues JSON.
Rahly

Pourquoi mélangez-vous le problème de statut strict JS à cette comparaison sans rapport? Se référant à des signes égaux doubles ou triples.
atilkan

1
@atilkan car de nombreux analyseurs interprètent les chaînes numériques comme des nombres ou stockent les nombres comme des chaînes numériques.
mazunki

244

Plus rapide n'est pas un attribut de JSON ou XML ou un résultat qu'une comparaison entre ceux-ci donnerait. Le cas échéant, il s'agit d'un attribut des analyseurs ou de la bande passante avec laquelle vous transmettez les données.

Voici (le début de) une liste des avantages et des inconvénients de JSON et XML:


JSON

Pro:

  • Syntaxe simple, qui se traduit par moins de surcharge de «balisage» par rapport à XML.
  • Facile à utiliser avec JavaScript car le balisage est un sous-ensemble de la notation littérale des objets JS et a les mêmes types de données de base que JavaScript.
  • Schéma JSON pour la description et la validation du type de données et de la structure
  • JsonPath pour extraire des informations dans des structures profondément imbriquées

Con:

  • Syntaxe simple, seuls quelques types de données différents sont pris en charge.

  • Aucun support pour les commentaires.


XML

Pro:

  • Balisage généralisé; il est possible de créer des "dialectes" pour tout type de but
  • Schéma XML pour le type de données, validation de la structure. Permet également de créer de nouveaux types de données
  • XSLT pour la transformation en différents formats de sortie
  • XPath / XQuery pour extraire des informations dans des structures profondément imbriquées
  • prise en charge intégrée des espaces de noms

Con:

  • Relativement verbeux par rapport à JSON (donne plus de données pour la même quantité d'informations).

Donc, à la fin, vous devez décider de ce dont vous avez besoin . Évidemment, les deux formats ont leurs cas d'utilisation légitimes. Si vous allez surtout utiliser JavaScript, vous devriez opter pour JSON.

N'hésitez pas à ajouter des avantages et des inconvénients. Je ne suis pas un expert XML;)


20
Un autre Con pour JSON et Pro pour XML: JSON ne prend pas en charge la référence d'objet (cyclique ou non), XML le fait. XML le fait en forçant l' idattribut à être unique dans le document.
Earth Engine

7
@EarthEngine En fait, Json.Net ( json.codeplex.com ) prend en charge les références d'objet: james.newtonking.com/projects/json/help/index.html?topic=html/… .
Dmitrii Lobanov

22
@DmitryLobanov: Ils ajoutent simplement quelques restrictions supplémentaires au standard JSON, mais il n'est pas reconnu par les autres outils JSON. Il n'est donc pas "natif" pour JSON. Cependant pour XML, la restriction est écrite dans la norme donc elle est native.
Earth Engine

1
Qu'en est-il du schéma JSON? en.wikipedia.org/wiki/JSON#JSON_Schema
John Doe

5
JSON a des tableaux intégrés, ainsi qu'une valeur "nulle". Alors qu'en XML, vous avez besoin d'une sorte de convention entre vos analyseurs de schéma. Il existe également des projets de conversion de type XSLT pour JSON (par exemple github.com/emlynoregan/bOTLjs )
Vasyl Boroviak

22

La vitesse de traitement n'est peut-être pas la seule question pertinente, cependant, comme c'est la question, voici quelques chiffres dans un benchmark: JSON vs XML: Quelques chiffres précis sur la verbosité . Pour la vitesse, dans ce benchmark simple, XML présente une surcharge de 21% sur JSON.

Une note importante sur la verbosité, qui est, comme le dit l'article, la plainte la plus courante: ce n'est pas tellement pertinent dans la pratique (ni les données XML ni JSON ne sont généralement gérées par les humains, mais par les machines), même si vitesse, il faut un peu plus de temps raisonnable pour compresser.

De plus, dans ce cas-ci, une grande quantité de données a été traitée, et une application Web typique ne transmettra pas de blocs de données de telles tailles, pouvant atteindre 90 Mo, et la compression peut ne pas être bénéfique (pour des blocs de données suffisamment petits, un bloc compressé sera plus grand que le morceau non compressé), donc non applicable.

Pourtant, si aucune compression n'est impliquée, JSON, comme évidemment terser, pèsera moins sur le canal de transmission, surtout s'il est transmis via une connexion WebSocket, où l'absence de la surcharge HTTP classique peut faire la différence à l'avantage de JSON, encore plus important.

Après la transmission, les données doivent être consommées, et cela compte dans le temps de traitement global. Si des données volumineuses ou suffisamment complexes doivent être transmises, l'absence d'un schéma automatiquement vérifié par un analyseur XML de validation peut nécessiter un contrôle plus approfondi des données JSON; ces vérifications devraient être exécutées en JavaScript, qui n'est pas connu pour être particulièrement rapide, et il peut donc présenter une surcharge supplémentaire par rapport à XML dans de tels cas.

Quoi qu'il en soit, seuls les tests fourniront la réponse à votre cas d'utilisation particulier (si la vitesse est vraiment la seule question, et non standard, ni sécurité ni intégrité…).

Mise à jour 1: il convient de mentionner EXI, le format XML binaire, qui offre une compression à moindre coût que l'utilisation de Gzip, et économise le traitement autrement nécessaire pour décompresser le XML compressé. EXI est au XML, ce que BSON est au JSON. Avoir un aperçu rapide ici, avec quelques références à l'efficacité dans l'espace et le temps: EXI: Le dernier standard binaire? .

Mise à jour 2: il existe également un rapport de performance XML binaire, mené par le W3C, car l'efficacité et la faible mémoire et l'encombrement du processeur sont également une question pour le domaine XML: Efficient XML Interchange Evaluation .

Mise à jour 2015-03-01

Cela vaut la peine d'être remarqué dans ce contexte, car la surcharge HTTP a été soulevée comme un problème: l'IANA a enregistré le codage EXI (le XML binaire efficace mentionné ci-dessus), en tant que codage de contenu pour le protocole HTTP (avec compresser , dégonfler et gzip ) . Cela signifie qu'EXI est une option qui devrait être comprise par les navigateurs parmi les autres clients HTTP. Voir Paramètres de protocole de transfert hypertexte (iana.org) .


"Pour la vitesse, dans ce benchmark simple, XML présente une surcharge de 21% par rapport à JSON" - il y a une grande différence dans l'analyse JSON en fonction de l'analyseur spécifique utilisé. Cela n'a presque aucun sens de citer un analyseur particulier. Idem pour XML.
Jeffrey Blattman

17

J'ai trouvé cet article au bazar numérique très intéressant. Citant leurs citations de Norm:

À 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 à un "Je te l'avais 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? ...

Je suis personnellement d'accord avec Norm. Je pense que la plupart des attaques contre XML proviennent de développeurs Web pour des applications typiques, et pas vraiment de développeurs d'intégration. Mais c'est mon avis! ;)


Bien placé! Si 80% des développeurs actifs sont des enfants javascript, 80% exprimeront leur opinion selon laquelle JSON est "meilleur". Mais quiconque utilise des langages typés est juste un peu amusé à propos de JSON. { "foo": 42 }De quel type est cet objet? Ensuite, pour corriger le manque de type, des choses comme ça up show: { "__type": "Bar", "foo": 42 }. En XML dans le type de contraste peut être connoté au nom de l' élément: <Bar><foo>42</foo></Bar>. Seuls les gars lisp et javascript comme json;)
BitTickler

15

Le XML (extensible Markup Language) est souvent utilisé XHR car il s'agit d'un langage de diffusion standard, qui peut être utilisé par n'importe quel langage de programmation, et pris en charge à la fois côté serveur et côté client, c'est donc la solution la plus flexible. Le XML peut être séparé pour plusieurs parties afin qu'un groupe spécifié puisse développer la partie du programme, sans affecter les autres parties. Le format XML peut également être déterminé par la DTD XML ou le schéma XML (XSL) et peut être testé.

Le JSON est un format d'échange de données qui devient de plus en plus populaire en tant que format possible des applications JavaScript. Fondamentalement, il s'agit d'un tableau de notation d'objet. JSON a une syntaxe très simple et peut donc être facilement apprise. Et aussi le support JavaScript analysant JSON avec la evalfonction. En revanche, la evalfonction a des points négatifs. Par exemple, le programme peut être très lent à analyser JSON et, pour des raisons de sécurité, il evalpeut être très risqué. Cela ne signifie pas que le JSON n'est pas bon, il faut juste être plus prudent.

Ma suggestion est que vous devriez utiliser JSON pour les applications avec un échange léger de données, comme les jeux. Parce que vous n'avez pas vraiment à vous soucier du traitement des données, c'est très simple et rapide.

Le XML est le meilleur pour les grands sites Web, par exemple les sites commerciaux ou quelque chose comme ça. Le XML peut être plus sûr et plus clair. Vous pouvez créer une structure de données et un schéma de base pour tester facilement la correction et la séparer facilement en plusieurs parties.

Je vous suggère d'utiliser XML en raison de la vitesse et de la sécurité, mais JSON pour des trucs légers.


Je ne vote pas en aval, mais je suis curieux de savoir comment vous voyez JSON comme une charge utile plus lourde ou plus lente en général. GZip / Deflate peut être appliqué. Sa syntaxe le rend intrinsèquement plus petit en termes d'octets. JSON peut également définir son schéma comme un contrat et être sérialisé en tant que tel facilement.
Anthony Mason

JSON n'a pas besoin d'être évalué pour être analysé.
Yay295

7

L'important à propos de JSON est de garder le transfert de données crypté pour des raisons de sécurité. Nul doute que JSON est beaucoup plus rapide que XML. J'ai vu XML prendre 100 ms alors que JSON ne prenait que 60 ms. Les données JSON sont faciles à manipuler.


5
Je suis d'accord, JSON gagne la bataille du transfert de données mais il manque sur le balisage, la validation et l'extension des éléments. C'est pourquoi Google explore sitemap.xml et non sitemap.json
Chetabahana

1
Le plan du site a été défini avant que json ne soit populaire, ce n'est donc pas le meilleur exemple. Le plan du site est également considéré comme un serveur à serveur où XML est plus populaire que JSON. (JSON vraiment uniquement parce qu'il est populaire car il est facile de travailler avec JavaScript.)
Matthew Whited

mais Google AMP utilise json et non xml
Ashraf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.