JavaScript Object Notation


JavaScript Object Notation

JSON (JavaScript Object Notation) est un format de données textuel, générique, dérivé de la notation des objets du langage ECMAScript. Il permet de représenter de l’information structurée. Créé par Douglas Crockford, il est décrit par la RFC 4627 de l’IETF.

Sommaire

Structure d'un document JSON

Un document JSON ne comprend que deux éléments structurels :

  • des ensembles de paires nom / valeur ;
  • des listes ordonnées de valeurs.

Ces mêmes éléments représentent 3 types de données :

Exemple

Format JSON :

 {"menu": {
   "id": "file",
   "value": "File",
   "popup": {
     "menuitem": [
       {"value": "New", "onclick": "CreateNewDoc()"},
       {"value": "Open", "onclick": "OpenDoc()"},
       {"value": "Close", "onclick": "CloseDoc()"}
     ]
   }
 }}


À titre de comparaison, le même exemple en XML :

 <menu id="file" value="File">
   <popup>
     <menuitem value="New" onclick="CreateNewDoc()" />
     <menuitem value="Open" onclick="OpenDoc()" />
     <menuitem value="Close" onclick="CloseDoc()" />
   </popup>
 </menu>

JSONP

JSONP pour JSON with padding (en français, « JSON avec formatage ») est une extension dans laquelle le nom de la fonction de retour est indiqué. L’idée originale proviendrait du blogue MacPython en 2005[1] et est maintenant répandu dans les applications Web 2.0, telle que Google’s toolkit Applications[2]. Des améliorations sont prévues pour y ajouter des arguments[3].

JSONP utilise des balises de scripts, les appels sont ouverts. Ainsi, JSONP peut être inapproprié pour transporter des informations confidentielles.

Commentaires

Les commentaires ne sont pas prévus par les spécifications JSON, cependant certains scripts d’analyse JSON prennent en compte les commentaires comme en JavaScript :

// Commentaires en fin de ligne
 
/*
commentaires en bloc
*/

Avantages

Ces types de données sont suffisamment génériques et abstraits pour, d’une part, pouvoir être représentés dans n’importe quel langage de programmation, d’autre part, pouvoir représenter n’importe quelle donnée concrète.

Le principal avantage de JSON est qu’il est simple à mettre en œuvre par un programmeur tout en étant complet.

Au rang des avantages, on peut également citer :

  • peu verbeux, ce qui le rend lisible aussi bien par un humain que par une machine ;
  • facile à apprendre, car sa syntaxe est réduite et non-extensible (bien que ne souffrant que de peu de limitations) ;
  • ses types de données sont connus et simples à décrire.

Utilisation

Bien qu’utilisant une notation JavaScript, JSON est indépendant du langage de programmation. Le site officiel présente (en août 2005) des solutions d’intégration de JSON pour 33 langages de programmation. Il sert à faire communiquer des applications dans un environnement hétérogène. Il est notamment utilisé comme langage de transport de données par AJAX et les services Web. D’autres solutions sont possibles comme XML. Le type MIME application/json est utilisé pour le transmettre par le protocole HTTP.

Vis-à-vis de JavaScript, un document JSON représente un objet, d’où son nom. Il est donc potentiellement plus facile à interpréter qu’un XML qui imposera le recours à des techniques, souvent plus lourdes qu’un accès direct, telle que le parcours hiérarchique de l’arbre DOM représenté par le document entier.

Il peut aussi être utilisé pour :

Évaluation

En JavaScript, il est simple d’évaluer une expression JSON pour la transformer en objet natif :

 var donnees = eval('('+donnees_json+')');

Cette méthode comporte toutefois des risques car la chaîne de caractères donnees_json peut contenir n’importe quel code JavaScript. Il existe une méthode plus sûre qui consiste à parser la chaîne de caractères donnees_json, seule solution disponible dans les autres langages de programmation, à l’exception de Python, la syntaxe de JSON correspondant à ses deux types principaux : les listes et les dictionnaires.

Les navigateurs commencent (en 2009) à intégrer un support natif du format JSON, ce qui facilite sa manipulation, la sécurité (contre l’évaluation de scripts malveillants inclus dans une chaine JSON), et la rapidité de traitement. Ainsi les navigateurs Firefox 3.5 , IE 8 ou encore Opera 10.5 l’intègrent en natif.

Évaluer en JavaScript une expression JSON pour la transformer en objet se fait alors de la manière suivante :

 var donnees = JSON.parse(donnees_json);
 
 // Ou version multi-navigateurs :
 
 var donnees2 = typeof JSON !='undefined' ?  JSON.parse(donnees_json) : eval('('+donnees_json+')');

Performances

Du point de vue du temps de traitement, évaluer une expression JSON en JavaScript est à peu de choses près aussi efficace que traiter son équivalent XML[4].

Du point de vue de la taille (stockage, vitesse de transmission…), une expression JSON est légèrement moins volumineuse ; la différence n’est cependant sensible que sur de gros volumes, ce qui est rarement le cas pour un usage courant.

JSON et la sécurité

Le format JSON est aujourd'hui largement utilisé pour récupérer des informations concernant les utilisateurs d'un site web. Les expressions JSON sont alors envoyées au client suivant l'identité de l'utilisateur, identifié par une session. Théoriquement, JavaScript ne permet à la fonction XMLHttpRequest (utilisée pour les requêtes JSON) d'effectuer des requêtes que vers les URL de même origine, ce qui empêche qu'un site malveillant www.A.com visité par un utilisateur ne profite de la session de celui-ci sur un site www.B.com pour récupérer des informations sur l'utilisateur en faisant une requête AJAX vers http://www.B.com/json.php. Toutefois, l'appel de script par la balise <script src=""> est une exception à la politique de même origine de JavaScript. Une balise <script src="http://www.B.com/json.php"> insérée dans le code html d'une page de www.A.com, avec une routine JavaScript exécutée à chaque déclaration d'un nouvel objet, permettrait le vol de données de chaque utilisateur visitant www.A.com avec une session active sur www.B.com.

Il est possible d'éviter cela en écrivant while(1); ou &&&BLABLA&&& au tout début de l'expression JSON. Ainsi, l'analyse du code JSON sur le site d'origine restera tout à fait fonctionnelle, mais l'exécution malveillante avec <script> depuis une page d'un domaine différent mènera à une boucle infinie ou une erreur de syntaxe.

Notes et références

Implémentations

Des bibliothèques pour JSON existent pour les langages suivants :

Voir aussi

Article connexe

  • YAML - Un autre langage de sérialisation de données.

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article JavaScript Object Notation de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • JavaScript Object Notation — Die JavaScript Object Notation, kurz JSON (IPA: /ˈdʒeɪsʌn/), ist ein kompaktes Datenformat in für Mensch und Maschine einfach lesbarer Textform zum Zweck des Datenaustauschs zwischen Anwendungen. Jedes gültige JSON Dokument soll ein gültiges… …   Deutsch Wikipedia

  • JavaScript — Paradigmen: multiparadigmatisch Erscheinungsjahr: 1995 Entwickler: Brendan Eich Aktuelle Version: 1.8  (2008) …   Deutsch Wikipedia

  • JavaScript 2.0 — JavaScript  Ne doit pas être confondu avec Java (langage). Apparu en …   Wikipédia en Français

  • Javascript —  Ne doit pas être confondu avec Java (langage). Apparu en …   Wikipédia en Français

  • JavaScript — Infobox programming language name = JavaScript paradigm = Multi paradigm: prototype based, functional, imperative, scripting year = 1995 designer = Brendan Eich developer = Netscape Communications Corporation, Mozilla Foundation latest release… …   Wikipedia

  • JavaScript —  Ne doit pas être confondu avec Java (langage). JavaScript …   Wikipédia en Français

  • JavaScript syntax — This article is part of the JavaScript series. JavaScript JavaScript syntax JavaScript topics This box: view · …   Wikipedia

  • Javascript — ist eine Skriptsprache, die hauptsächlich für das DOM Scripting in Web Browsern eingesetzt wird. Dabei ist unter JavaScript die Gesamtheit aus den Eigenschaften des Browsers (beziehungsweise Clients oder Scripting Hosts) sowie des Document Object …   Deutsch Wikipedia

  • Object literal — In computer science, a literal is a notation for representing a fixed value in source code, eg string literal. In contrast to this, variables or constants are symbols that can take on one of a class of fixed values, the constant being constrained …   Wikipedia

  • Moteur javascript — JavaScript  Ne doit pas être confondu avec Java (langage). Apparu en …   Wikipédia en Français


Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.