Quelle est la différence entre json et xml

Quelle est la différence entre JSON et XML?

La différence fondamentale, qu’aucune autre réponse ne semble avoir mentionnée, est que XML est un langage de balisage (comme il le dit réellement dans son nom), alors que JSON est une manière de représenter des objects (comme noté également dans son nom).

Un langage de balisage est un moyen d’append des informations supplémentaires au texte en clair, par exemple

Here is some text. 

Avec XML (en utilisant un vocabulaire spécifique), vous pouvez mettre:

   Here is some text.   

C’est ce qui rend les langages de balisage si utiles pour représenter des documents.

Une notation d’object comme JSON n’est pas aussi flexible. Mais c’est généralement une bonne chose. Lorsque vous représentez des objects, vous n’avez tout simplement pas besoin de flexibilité supplémentaire. Pour représenter l’exemple ci-dessus dans JSON, vous devrez résoudre certains problèmes manuellement que XML résout pour vous.

 { "Paragraphs": [ { "align": "center", "content": [ "Here ", { "style" : "bold", "content": [ "is" ] }, " some text." ] } ] } 

Ce n’est pas aussi beau que le XML, et la raison en est que nous essayons de faire du balisage avec une notation d’object. Nous devons donc inventer un moyen de disperser des fragments de texte brut autour de nos objects, en utilisant des tableaux de “contenu” pouvant contenir un mélange de chaînes et d’objects nesteds.

Par contre, si vous avez une hiérarchie d’objects typique et que vous souhaitez les représenter dans un stream, JSON convient mieux à cette tâche que HTML.

 { "firstName": "Homer", "lastName": "Simpson", "relatives": [ "Grandpa", "Marge", "The Boy", "Lisa", "I think that's all of them" ] } 

Voici le XML logiquement équivalent:

  Homer Simpsons  Grandpa Marge The Boy Lisa I think that's all of them   

JSON ressemble plus aux structures de données que nous déclarons dans les langages de programmation. En outre, la répétition des noms est moins redondante.

Mais surtout, il existe un moyen défini de distinguer un “enregistrement” (éléments non ordonnés, identifiés par des noms) et une “liste” (articles commandés, identifiés par leur position). Une notation d’object est pratiquement inutile sans une telle distinction. Et XML n’a pas une telle distinction! Dans mon exemple XML, est un enregistrement et est une liste, mais ils ne sont pas identifiés comme tels par la syntaxe.

Au lieu de cela, XML a des “éléments” versus des “atsortingbuts”. Cela ressemble au même genre de distinction, mais ce n’est pas le cas, car les atsortingbuts ne peuvent avoir que des valeurs de chaîne. Ils ne peuvent pas être des objects nesteds. Je n’aurais donc pas pu appliquer cette idée à , car je ne devrais pas avoir à transformer en une seule chaîne.

En utilisant un schéma externe ou des atsortingbuts supplémentaires définis par l’utilisateur, vous pouvez formaliser une distinction entre les listes et les enregistrements au format XML. L’avantage de JSON est que la syntaxe de bas niveau a cette distinction intégrée, elle est donc très succincte et universelle. Cela signifie que JSON est plus “auto-descriptif” par défaut, ce qui est un objective important des deux formats.

Donc, JSON devrait être le premier choix pour la notation d’object, où le point positif de XML est le balisage de document.

Malheureusement, pour XML, le langage HTML est déjà le langage de balisage de texte riche le plus utilisé au monde. Une tentative a été faite de reformuler le HTML en termes de XML, mais cela n’a pas beaucoup d’avantage.

Donc, à mon avis, XML devrait être une technologie de niche assez limitée, qui ne convient que pour inventer vos propres langages de balisage de texte enrichi si vous ne souhaitez pas utiliser le HTML pour une raison quelconque. Le problème était qu’en 1998, il y avait encore beaucoup de battage médiatique sur le Web, et le XML est devenu populaire en raison de sa ressemblance superficielle avec HTML. C’était un choix de conception étrange d’essayer d’appliquer aux données hiérarchiques une syntaxe réellement conçue pour un balisage pratique.

Ce sont tous deux des formats de données pour les données hiérarchiques, alors même si la syntaxe est très différente, la structure est similaire. Exemple:

JSON:

 { "persons": [ { "name": "Ford Prefect", "gender": "male" }, { "name": "Arthur Dent", "gender": "male" }, { "name": "Tricia McMillan", "gender": "female" } ] } 

XML:

   Ford Prefect male   Arthur Dent male   Tricia McMillan female   

Le format XML est plus avancé que celui illustré par l’exemple. Vous pouvez par exemple append des atsortingbuts à chaque élément et utiliser des espaces de noms pour partitionner des éléments. Il existe également des normes pour définir le format d’un fichier XML, le langage XPATH pour interroger les données XML et XSLT pour transformer le XML en données de présentation.

Le format XML existe depuis un certain temps, il y a donc beaucoup de logiciels développés pour cela. Le format JSON est assez récent, il y a donc beaucoup moins de support.

Bien que XML ait été développé en tant que format de données indépendant, JSON a été développé spécifiquement pour être utilisé avec Javascript et AJAX. Le format est donc exactement le même qu’un object littéral Javascript (c’est un sous-ensemble du code Javascript). ne contiennent pas d’expressions pour déterminer les valeurs).

La différence fondamentale entre XML et JSON est que XML est un méta-langage et JSON est un langage de balisage. En d’autres termes, la syntaxe XML est conçue spécifiquement pour ne pas avoir de sémantique inhérente. Les noms d’éléments particuliers ne signifient rien tant qu’une application de traitement particulière ne les traite pas d’une manière particulière. En revanche, la syntaxe JSON intègre des sémantiques spécifiques: stuff entre {} est un object, des trucs entre [] sont un tableau, etc.

Un parsingur JSON sait donc exactement ce que signifie chaque document JSON. Un parsingur XML ne sait que séparer le balisage des données. Pour gérer la signification d’un document XML, vous devez écrire du code supplémentaire.

Pour illustrer ce point, permettez-moi d’emprunter l’exemple de Guffa:

 { "persons": [ { "name": "Ford Prefect", "gender": "male" }, { "name": "Arthur Dent", "gender": "male" }, { "name": "Tricia McMillan", "gender": "female" } ] } 

L’équivalent XML qu’il donne n’est pas vraiment la même chose, car tandis que l’exemple JSON est sémantiquement complet, le XML devrait être interprété d’une manière particulière pour avoir le même effet. En effet, le JSON est un exemple utilisant un langage de balisage établi dont la sémantique est déjà connue, tandis que l’exemple XML crée un tout nouveau langage de balisage sans aucune sémantique prédéfinie.

Un meilleur équivalent XML serait de définir un langage XJSON (fictif) avec la même sémantique que JSON, mais en utilisant la syntaxe XML. Cela pourrait ressembler à ceci:

   persons    name Ford Prefect gender male   name Arthur Dent gender male   name Tricia McMillan gender female      

Une fois que vous avez écrit un processeur XJSON, il peut faire exactement ce que fait le processeur JSON, pour tous les types de données que JSON peut représenter, et vous pouvez traduire des données sans perte entre JSON et XJSON.

Donc, se plaindre que XML n’a pas la même sémantique que JSON, c’est manquer le point. La syntaxe XML est sans sémantique par conception. Le but est de fournir une syntaxe sous-jacente pouvant être utilisée pour créer des langages de balisage avec n’importe quelle sémantique souhaitée. Cela rend XML idéal pour créer des formats de données et de documents ad hoc, car vous n’avez pas besoin de créer des parsingurs pour eux, il vous suffit d’écrire un processeur pour eux.

Mais l’inconvénient de XML est que la syntaxe est verbeuse. Pour tout langage de balisage que vous souhaitez créer, vous pouvez créer une syntaxe beaucoup plus succincte qui exprime la sémantique particulière de votre langue. Ainsi, la syntaxe JSON est beaucoup plus compacte que mon hypothétique XJSON ci-dessus.

Si, par la suite, pour les formats de données très répandus, le temps supplémentaire nécessaire pour créer une syntaxe unique et écrire un parsingur pour cette syntaxe est compensé par la syntaxe plus succincte et plus intuitive du langage de balisage personnalisé. Il s’ensuit également qu’il est souvent plus logique d’utiliser JSON, avec sa sémantique établie, que de créer beaucoup de langages de balisage XML pour lesquels vous devez ensuite implémenter la sémantique.

Il s’ensuit également qu’il est logique de prototyper certains types de langages et de protocoles en XML, mais, une fois que le langage ou le protocole est couramment utilisé, il convient de penser à créer une syntaxe personnalisée plus compacte et plus expressive.

Il est intéressant de noter que SGML a reconnu cela et a fourni un mécanisme pour spécifier un balisage réduit pour un document SGML. Ainsi, vous pourriez réellement écrire une DTD SGML pour JSON qui permettrait à un document JSON d’être lu par un parsingur SGML. XML a supprimé cette fonctionnalité, ce qui signifie qu’aujourd’hui, si vous voulez une syntaxe plus compacte pour un langage de balisage spécifique, vous devez laisser XML, comme le fait JSON.

Ce sont deux façons différentes de représenter les données, mais elles sont très différentes. Les pages Wikipédia pour JSON et XML donnent des exemples de chacun, et il y a un paragraphe de comparaison

Ce sont deux formats de représentation de l’information. Alors que JSON était conçu pour être plus compact, XML était conçu pour être plus lisible.

XML utilise une structure de balise pour présenter des éléments, comme item , donc un document XML est un ensemble de balises nestedes les unes dans les autres. Et la syntaxe JSON ressemble à une construction à partir du langage Javascript, avec toutes les choses comme les listes et les dictionnaires:

 { 'atsortingb' : 'value', 'array' : [1, 2, 3] } 

Donc, si vous utilisez JSON, il est très simple d’utiliser des chaînes JSON dans de nombreux langages de script, en particulier Javascript et Python.