327 votes

Quels sont les avantages et les inconvénients de XML et de JSON ?

Nous sommes une boutique XML (nous utilisons à la fois XMPP et RSS/Atom se nourrit beaucoup, donc je suppose que nous n'avons pas ou peu le choix). Pourtant, je continue d'entendre parler de personnes qui "détestent" XML et refusent parfois d'utiliser des API qui ne peuvent renvoyer que du XML en faveur de JSON .

Il semble que beaucoup préfèrent JSON mais je ne sais toujours pas pourquoi. Bien sûr, JSON est tellement plus léger et plus facile à utiliser. moins verbeux mais en même temps, ce n'est pas facile. extensible et je ne suis pas sûr qu'il existe des analyseurs SAX pour JSON, par exemple. De plus, je ne suis pas sûr que JSON et XML soient destinés à être lus par des humains de toute façon.

Je comprends que cette question est trop ouverte, alors peut-être que nous pourrions simplement énumérer Avantages et inconvénients de XML ? N'hésitez pas à indiquer également quand vous pensez qu'il est approprié d'utiliser XML, et quand il est plus approprié d'utiliser des alternatives comme JSON ? (Merci Muhammad Alkarouri )

Les inconvénients de XML :

  • Verbosité (nécessité de balises fermantes)
  • Une extensibilité trop facile à gâcher (trop libérale ?)
  • Difficile à lire pour les humains
  • Lent (à traiter, je suppose)
  • Faible performance pour les données binaires
  • Certains caractères doivent être échappés
  • Pas de langue maternelle

Les avantages de XML :

  • Facile à lire lorsqu'il est formaté correctement
  • Espacement des noms et extensibilité
  • Flexibilité

Tout le monde semble d'accord pour dire que le problème avec XML c'est qu'il est utilisé trop souvent alors qu'il n'est pas nécessaire.

268voto

sushant Points 159

"XML est comme la violence. S'il ne résout pas votre problème, vous n'en utilisez pas assez."
- Inconnu | Chris Maden

Liens d'intérêt pour cette citation :

231voto

Schwern Points 33677

En laissant de côté les arguments subjectifs évidents (c'est verbeux, les analyseurs sont complexes et lents, la spécification est énorme, le rapport entre les données et le marquage est mauvais), je vais parler du modèle de données de XML par rapport à JSON.

Premièrement, le modèle de données correspond aux données. Les paires clé/valeur (hachages), les listes et les scalaires sont les principaux moyens d'organisation. Ce sont des structures de données naturelles avec lesquelles les humains travaillent bien. Regardez le monde qui vous entoure, vous les trouverez partout. Considérez un simple formulaire, une liste de courses, une description de vous-même, une liste des choses que vous avez faites aujourd'hui ou un courriel dans votre boîte de réception. XML aime les arbres, et c'est gênant. Vous pouvez consulter le site peut modéliser tout comme un arbre. D'un point de vue informatique, il s'agit d'une structure très flexible, mais elle n'est pas naturelle. Les choses ont tendance à avoir un peu de structure hiérarchique, mais pas en tant que primaire les moyens d'organisation.

Deuxièmement, le modèle de données correspond aux structures de données natives des langages de programmation dynamiques. Je ne saurais trop insister sur ce point. La lecture d'un document JSON dans Perl, Ruby, Python ou Javascript est triviale car il correspond directement aux variables natives. Il suffit de l'ingurgiter. Le XML doit être transformé, car la plupart des langages ne font pas bien les arbres et les graphes. Et vous devez décider comment vous allez gérer les attributs par rapport aux balises internes. Allez-vous obtenir <person eyes="blue">Joe</person> ou <person><eyes>blue</eyes><name>Joe</name></person> ? Chaque organisation aura sa propre façon de procéder avec ses propres balises et ses propres particularités, ce qui implique un codage supplémentaire pour les développeurs. Regardez l'abomination que sont Listes d'Apple pour un exemple.

JSON, de par sa simplicité et son modèle de données qui correspond à la nature des données qu'il représente, ne peut représenter des données données données que de quelques manières plausibles. Il n'est donc pas nécessaire d'avoir un schéma, il suffit d'y jeter un œil. Et comme son modèle de données correspond au modèle de données natif du langage, la transformation des données d'un document JSON est aussi simple que la transformation de n'importe quelle autre donnée. Aucune manipulation d'arbre n'est nécessaire.

JSON est terriblement limité, et il y a beaucoup de choses qu'il ne peut pas faire. Mais ce n'est pas grave, il est naturellement contraint par ses limites. Vous ne pouvez pas faire faire à JSON ce qu'il ne peut pas faire (pas sans beaucoup de travail). XML est le contraire. Il est générique et sans contrainte. Vous pouvez prendre presque n'importe quel problème de données et l'appliquer à XML. Des fichiers de configuration ? Fichiers journaux ? Courrier électronique ? Fichiers de construction de projet ? Bien sûr ! Mettez tout ça en XML ! Ajoutez à cela que pendant un certain temps, le XML était le seul format de données générique sérieux, et qu'il était présenté comme le format universel, et vous obtenez une génération de technologies construites avec le XML qui sont surdimensionnées.

Le XML a été introduit lorsque j'ai commencé à programmer. Il a été salué comme le grand sauveur de l'échange de données ! Il n'était plus nécessaire d'écrire des analyseurs personnalisés pour les formats de données inventés que vos partenaires commerciaux utilisaient, il suffisait de faire circuler des documents XML ! C'est générique ! Vous n'avez besoin que d'un seul analyseur ! C'était un grand pas en avant, mais ce n'était pas la solution miracle annoncée. Il fallait toujours interpréter les données, ce qui signifiait (si vous aviez de la chance) un fichier de schéma et la transformation de cette structure arborescente maladroite en quelque chose que vous pouviez réellement utiliser. Vous vous retrouvez avec un cadre imposant de technologies XML.

Beaucoup d'entreprises se sont laissées convaincre, ont écrit des documents XML comme bon leur semblait et s'attendaient à ce que leurs problèmes de données disparaissent. Ce n'est pas ce qui s'est passé.

Cette réponse a commencé à être rationnelle et est naturellement devenue frustrée. Je vais essayer de résumer. Le XML a un modèle de données maladroit, il est souvent excessif et il a été survendu. Si vous avez besoin de données typées, hiérarchisées, générées et consommées par une machine, c'est génial ! Mais en général, ce n'est pas le cas et il n'est donc pas adapté à la tâche.

Cela dit, je préfère YAML .

126voto

dan04 Points 33306

Le problème avec XML, c'est que les gens oublient qu'il s'agit de l'acronyme "Extensible". Balisage Language" et non "Extensible Data Serialization Language".

Pour quelque chose comme XHTML, XML fait un travail raisonnable. Les données sont principalement du texte, ce n'est donc pas un problème que le seul type de données soit du texte. Le rapport balise/texte est faible, ce n'est donc pas un problème de devoir écrire chaque balise deux fois. En fait, il s'agit d'un avantage considérable en termes de lisibilité dans les cas suivants <script>...</script> parce que vous ne verrez peut-être pas les deux balises à l'écran en même temps. Il est également judicieux de disposer d'attributs, car dans le cas de <div id="answer-12345678" class="answer">...</div> la distinction entre les "données" (élément de texte) et les "métadonnées" (attributs) est claire : les "données" sont affichées à l'utilisateur et les "métadonnées" servent à la mise en forme et à la navigation.

Mais dans un langage de sérialisation des données, <UserID>287586</UserID> est une verbosité inutile : Les balises sont plus longues que les données ! Et la distinction contenu/attribut est également redondante ; quelle est la différence entre <name first="John" last="Doe" /> et <name><first>John</first><last>Doe</last></name> ?

Le manque de types de données dans XML est également un problème. Bien sûr, vous pourriez utiliser une convention comme écrire <UserID type="int">287586</UserID> ou de disposer d'un moyen externe (tel que XML Schema) pour déclarer le type de chaque élément, mais c'est bien plus compliqué que de disposer de 287586 soit un nombre entier et "287586" être une chaîne de caractères.

Le système de types JSON s'adapte très bien aux langages de programmation : Près de chaque Le langage possède des chaînes de caractères, des nombres, des bools, et des null . Et la plupart des langages de type dynamique ont des types pour représenter "array" et "object" (application de chaînes de caractères à des objets).

Python json ne définit aucun type de données qui ne fasse pas partie de l'analyseur/encodeur lui-même : Tout est représenté par les types intégrés int , float , bool , list , dict et None . En revanche, xml.dom.minidom doit définir les types Document , Node , Element , CDATASection etc. pour représenter les concepts spécifiques à XML.

43voto

La moitié est un préjugé. L'autre moitié est qu'il est trop verbeux pour la plupart des applications pour lesquelles il est utilisé, alors qu'un format plus restreint (par exemple JSON ou YAML) conviendrait parfaitement.

30voto

Hristo Deshev Points 694

Je ne déteste pas le XML et je ne le trouve pas frustrant. Je déteste les gens qui essaient de résoudre tous les problèmes du monde avec XML. Cela me frustre... beaucoup.

Le XML s'impose comme un moyen extensible de représenter des données qui peuvent être facilement lues par de nombreux systèmes différents. Et c'est tout. Quand je vois qu'il est utilisé pour les fichiers de configuration, la représentation de la mise en page de l'interface utilisateur (XAML, quelqu'un ?) ou le code ordinaire (descriptions de flux de travail comme WF de Microsoft, outils de construction comme Ant, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X