web-dev-qa-db-fra.com

Quelle est la difference entre json et xml

Quelle est la différence entre JSON et XML?

72
pia

La différence fondamentale, qu'aucune autre réponse ne semble avoir évoquée, est que XML est un langage de balisage (comme son nom l'indique), alors que JSON est une manière de représenter des objets (comme indiqué dans son nom).

Un langage de balisage est un moyen d’ajouter des informations supplémentaires à un texte simple et fluide, par exemple

Here is some text.

Avec XML (en utilisant le vocabulaire d'un certain élément), vous pouvez mettre:

<Document>
    <Paragraph Align="Center">
        Here <Bold>is</Bold> some text.
    </Paragraph>
</Document>

C'est ce qui rend les langages de balisage si utiles pour la représentation de documents.

Une notation d'objet telle que JSON n'est pas aussi flexible. Mais c'est généralement une bonne chose. Lorsque vous représentez des objets, vous n'avez simplement pas besoin de plus de flexibilité. Pour représenter l'exemple ci-dessus en JSON, vous devez en fait résoudre manuellement certains problèmes que XML résout pour vous.

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

Ce n'est pas aussi agréable que le XML, et la raison en est que nous essayons de faire du balisage avec une notation d'objet. Nous devons donc inventer un moyen de disperser des fragments de texte brut autour de nos objets, en utilisant des tableaux de "contenu" pouvant contenir un mélange de chaînes et d'objets imbriqués.

Par contre, si vous avez une hiérarchie d'objets typique et que vous souhaitez les représenter dans un flux, 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:

<Person>
    <FirstName>Homer</FirstName>
    <LastName>Simpsons</LastName>
    <Relatives>
        <Relative>Grandpa</Relative>
        <Relative>Marge</Relative>
        <Relative>The Boy</Relative>
        <Relative>Lisa</Relative>
        <Relative>I think that's all of them</Relative>
    </Relatives>
</Person>

JSON ressemble davantage 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 le plus important de tous, il a une manière définie de distinguer entre un "enregistrement" (éléments non ordonnés, identifiés par des noms) et une "liste" (éléments ordonnés, identifiés par la position). Une notation d'objet est pratiquement inutile sans une telle distinction. Et XML n'a pas une telle distinction! Dans mon exemple XML <Person> est un enregistrement et <Relatives> est une liste, mais ils ne sont pas identifiés comme tels par la syntaxe.

Au lieu de cela, XML a "éléments" contre "attributs". Cela ressemble au même genre de distinction, mais ce n'est pas le cas, car les attributs ne peuvent avoir que des valeurs de chaîne. Ils ne peuvent pas être des objets imbriqués. Je n'aurais donc pas pu appliquer cette idée à <Person>, parce que je ne devrais pas avoir à tourner <Relatives> en une seule chaîne.

En utilisant un schéma externe ou des attributs 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 réside dans le fait que la syntaxe de bas niveau intègre cette distinction. Elle est donc très succincte et universelle. Cela signifie que JSON est plus "auto-descriptif" par défaut, ce qui est un objectif important des deux formats.

JSON devrait donc être le premier choix pour la notation d'objet, où le point fort de XML est le balisage de document.

Malheureusement pour XML, nous avons déjà HTML comme premier langage de balisage de texte enrichi au monde. Une tentative de reformulation de HTML en XML a été tentée, mais cela présente peu d’avantages.

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

157
Daniel Earwicker

Ils sont tous deux des formats de données pour les données hiérarchiques. Ainsi, bien que la syntaxe soit 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:

<persons>
  <person>
    <name>Ford Prefect</name>
    <gender>male</gender>
  </person>
  <person>
    <name>Arthur Dent</name>
    <gender>male</gender>
  </person>
  <person>
    <name>Tricia McMillan</name>
    <gender>female</gender>
  </person>
</persons>

Le format XML est cependant plus avancé que celui indiqué dans l'exemple. Vous pouvez par exemple ajouter des attributs à chaque élément et utiliser des espaces de nom pour partitionner des éléments. Il existe également des normes permettant de définir le format d'un fichier XML, le langage XPATH permettant d'interroger des données XML et XSLT permettant de transformer XML en données de présentation.

Le format XML existe depuis un certain temps, de nombreux logiciels ont donc été développés pour cela. Le format JSON est relativement nouveau, il est donc beaucoup moins pris en charge.

Alors que XML a été développé en tant que format de données indépendant, JSON a été développé spécifiquement pour une utilisation avec Javascript et AJAX. Le format est donc exactement identique à un objet littéral Javascript (c’est-à-dire qu’il s’agit d’un sous-ensemble du code Javascript, tel ne contient pas d’expressions pour déterminer les valeurs).

27
Guffa

La différence entre XML et JSON est que XML est un méta-langage/langage de balisage et que JSON est un échange de données léger. C'est-à-dire que la syntaxe XML est conçue spécifiquement pour ne pas avoir de sémantique inhérente. Les noms d'éléments particuliers ne veulent rien dire jusqu'à ce qu'une application de traitement particulière les traite d'une manière particulière. En revanche, la syntaxe JSON a une sémantique spécifique, les éléments entre {} étant un objet, les éléments entre [] étant un tableau, etc.

Un analyseur JSON, par conséquent, sait exactement ce que chaque document JSON signifie. Un analyseur XML sait seulement comment séparer le balisage des données. Pour traiter de la signification d'un document XML, vous devez écrire du code supplémentaire.

Pour illustrer ce propos, permettez-moi de reprendre 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 puisque si l'exemple JSON est sémantiquement complet, le code XML nécessiterait d'être interprété d'une manière particulière pour avoir le même effet. En effet, le JSON est un exemple qui utilise un langage de balisage établi dont la sémantique est déjà connue, tandis que l'exemple XML crée un 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 à quelque chose comme ça:

<xjson>   
  <object>
    <name>persons</name>
    <value>
      <array>
         <object>
            <value>Ford Prefect</value>
            <gender>male</gender>
         </object>
         <object>
            <value>Arthur Dent</value>
            <gender>male</gender>
         </object>
         <object>
            <value>Tricia McMillan</value>
            <gender>female</gender>
         </object>
      </array>
    </value>   
  </object> 
 </xjson>

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 convertir les 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 rater le coche. La syntaxe XML ne contient aucune sémantique. Le but est de fournir une syntaxe sous-jacente qui peut être utilisée pour créer des langages de marquage avec la sémantique de votre choix. Cela rend XML idéal pour la création de formats de données et de documents ad-hoc, car vous n'avez pas besoin de créer des analyseurs syntaxiques pour ceux-ci, 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 proposer une syntaxe beaucoup plus succincte qui exprime la sémantique particulière de votre langage. Ainsi, la syntaxe JSON est beaucoup plus compacte que mon hypothétique XJSON ci-dessus.

Si cela suit pour les formats de données très largement utilisés, le temps supplémentaire nécessaire pour créer une syntaxe unique et écrire un analyseur syntaxique pour cette syntaxe est compensé par la plus grande concision et la syntaxe plus intuitive du langage de balisage personnalisé. Il s'ensuit également qu'il est souvent plus judicieux d'utiliser JSON, avec sa sémantique établie, que de créer de nombreux 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 devenu d'usage courant, de réfléchir à la création d'une syntaxe personnalisée plus compacte et plus expressive.

Il est intéressant de noter, en note de côté, que SGML l’a reconnu et qu’il a fourni un mécanisme permettant de spécifier une marge réduite pour un document SGML. Ainsi, vous pourriez réellement écrire une syntaxe DTD SGML pour JSON qui permettrait à un document JSON d'être lu par un analyseur syntaxique SGML. XML a supprimé cette fonctionnalité, ce qui signifie qu'aujourd'hui, si vous souhaitez une syntaxe plus compacte pour un langage de balisage spécifique, vous devez laisser XML, comme le fait JSON.

20
Mark Baker

Ce sont deux manières différentes de représenter des données, mais elles sont assez différentes. Les pages wikipedia pour JSON et XML donnent quelques exemples de chacun, et il y a comparaison paragraphe

4
Michael Mrozek

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

3
Fitzchak Yitzchaki

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

{
 'attrib' : '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, notamment Javascript et Python.

2
Enchantner