24 votes

Pourquoi est-JSON-il important?

J'ai récemment entendu parler de JSON (Javascript Object Notation). Quelqu'un peut-il expliquer pourquoi il est considéré (par certains sites web/blogs/etc) d'être important? Nous avons déjà XML, pourquoi est-JSON mieux (à l'exception du "natif Javascript')?

Edit: Hmm, la principale réponse à thème semble être "il est plus petit". Cependant, le fait qu'il permet la récupération de données sur plusieurs domaines, me semble important. Ou est-ce dans la pratique pas (encore) beaucoup utilisé?

18voto

Mehrdad Afshari Points 204872

XML a plusieurs inconvénients:

  • C'est du lourd!
  • Il fournit une représentation hiérarchique de contenu qui n'est pas exactement la même chose que (mais à peu près similaire à) le Javascript object model.
  • Javascript est disponible partout. Sans externe des analyseurs, vous pouvez traiter JSONs directement avec JS interprète.

De toute évidence, elle n'est pas destinée à remplacer XML complètement. Pour JS en fonction des applications Web, de ses avantages peuvent être utiles.

12voto

Richard Szalay Points 42486

JSON est généralement beaucoup plus petit que son équivalent XML. Petit transfert des moyens de transfert plus rapides, ce qui résulte en une meilleure expérience utilisateur.

11voto

jmah Points 1770

JSON est beaucoup plus concis. XML:

<person>
    <name>John Doe</name>
    <tags>
        <tag>friend</tag>
        <tag>male</tag>
   </tags>
</person>

JSON:

{"name": "John Doe", "tags": ["friend", "male"]}

Il y a moins de fonctionnalités qui se chevauchent, aussi. Par exemple, dans le format XML il existe une tension entre le fait de choisir d'utiliser des éléments (comme ci-dessus), par rapport à des attributs (<person name="John Doe">).

11voto

Aaron Boodman Points 191

JSON est entré en usage populaire principalement parce qu'il offre un moyen de contourner la politique de " même origine utilisé dans les navigateurs web, et permettre ainsi aux mashups.

Disons que vous êtes en train de rédiger un service web sur le domaine A. Vous ne pouvez pas charger des données XML à partir d'un domaine B et l'analyse parce que la seule façon de le faire serait XMLHttpRequest, et XMLHttpRequest était à l'origine limitée par la même la politique de l'origine de parler uniquement les Url dans le même domaine que la page qui les contient.

Il s'avère que pour une variété de raisons, vous êtes autorisé à demander des balises <script> à travers les origines. Les gens intelligents réalisé que c'était un bon moyen de contourner la limitation avec XMLHttpRequest. Au lieu du serveur de renvoi XML, il peut renvoyer à une série d'objet JavaScript et des littéraux de tableau.

(question bonus laissé comme exercice au lecteur: pourquoi est <script src="..."> permis à l'ensemble des domaines sans serveur opt-in, mais XHR n'est-ce pas?)

Bien sûr, le retour d'un <script> qui se compose de rien de plus que des littéraux d'objet n'est pas utile car sans affectation de valeurs à une variable, vous ne pouvez pas faire quelque chose avec elle. Ainsi, la plupart des services utilisent une variante de JSON, appelé JSONP (http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/).

Avec la montée en popularité de mashups, les gens ont réalisé que JSON est un pratique format d'échange de données en général, en particulier lorsque le JavaScript est un bout de la chaîne. Par exemple, JSON est largement utilisé dans Chrome, même dans les cas où C++ est sur les deux côtés. C'est juste un bon moyen léger pour représenter les données simple, que de bons analyseurs existent dans de nombreuses langues.

De manière amusante, à l'aide de balises <script> pour faire des mashups est incroyablement sûre car il est essentiellement XSS avec vous-même sur le but. Donc, natif JSON (http://ejohn.org/blog/native-json-support-is-required/) a dû être introduit, ce qui évite les avantages du format. Mais, à l'époque, c'était déjà super populaire :)

5voto

jlarson Points 3823

Si vous travaillez en Javascript, il est beaucoup plus facile pour nous de JSON. C'est parce que JSON peut être évalué directement dans un objet Javascript, ce qui est beaucoup plus facile à travailler que le DOM.

D'emprunt et de légèrement modifier le XML et JSON à partir de ci-dessus

XML:

<person>
    <name>John Doe</name>
    <tag>friend</tag>
    <tag>male</tag>
</person>

JSON:

{ person: {"name": "John Doe", "tag": ["friend", "male"]} }

Si vous voulais avoir la deuxième balise object avec XML, vous devez utiliser le puissant mais verbose DOM api:

var tag2=xmlObj.getElementsByTagName("person")[0].getElementsByTagName("tag")[1];

Alors qu'avec un objet Javascript qui est venu dans la via JSON, vous pouvez simplement utiliser:

var tag2=jsonObj.person.tag[1];

Bien sûr, Jquery rend les DOM exemple beaucoup plus simple:

var tag2=$("person tag",xmlObj).get(1);

Cependant, JSON juste "s'inscrit" dans un Javascript monde. Si vous travaillez avec elle pendant un certain temps, vous verrez que vous avez beaucoup moins de surcharge mentale que d'associer XML base de données.

Tous les exemples ci-dessus ignorer la possibilité qu'un ou plusieurs nœuds sont disponibles, dupliqué, ou la possibilité que le nœud a un ou pas d'enfants. Cependant, pour illustrer le natif-ness de JSON, pour ce faire avec le jsonObj, vous avez juste à:

var tag2=(jsonObj.person && jsonObj.person.tags && jsonObj.person.tags.sort && jsonObj.person.tags.length==2 ? jsonObj.person.tags[1] : null);

(certaines personnes pourraient ne pas aimer qu'long de ternaire, mais il fonctionne). Mais XML serait (à mon avis) plus méchant (je ne pense pas que vous voulez aller au ternaire, car vous auriez du continuer à appeler les méthodes du dom qui peuvent avoir à faire le travail encore selon mise en œuvre):

var tag2=null;
var persons=xmlObj.getElementsByTagName("person");
if(persons.length==1) {
    var tags=persons[0].getElementsByTagName("tag");
    if(tags.length==2) { tag2=tags[1]; }
}

Jquery (non testé):

var tag2=$("person:only-child tag:nth-child(1)",xmlObj).get(0);

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