You are on page 1of 6

JavaScript Object Notation Wikipdia https://fr.wikipedia.

org/wiki/JavaScript_Object_Notation

JavaScript Object Notation


1
JSON (prononciation : /i.sn/ (fr) ou /dej.sn/ (fr) ,
ou /desn/ (en)2), ou JavaScript Object Notation, est
JSON
un format de donnes textuelles driv de la notation des
objets du langage JavaScript. Il permet de reprsenter de
linformation structure comme le permet XML par
exemple. Cr par Douglas Crockford entre 2002 et 2005,
il est dcrit par la RFC 7159 de lIETF.

Un document JSON a pour fonction de reprsenter de


l'information accompagne d'tiquettes permettant d'en
Logo de JSON.
interprter les divers lments, sans aucune restriction sur
le nombre de celles-ci. Caractristiques

Un document JSON ne comprend que deux types Extension .json


d'lments structurels : Type MIME application/json
PUID fmt/817
Des ensembles de paires nom / valeur ; Des listes
(https://www.nationalarchive
ordonnes de valeurs.
s.gov.uk/pronom/fmt/817)
Ces mmes lments reprsentent trois types de donnes : Type de format srialisation d'informations
Extension du JavaScript
Des objets ;
Des tableaux ; Site web json.org (http://json.org)
Des valeurs gnriques de type tableau, objet, boolen,
nombre, chane ou null.

Sommaire
1 Exemple
2 Typage
3 Commentaires
4 Avantages
5 Inconvnients
6 Utilisation
7 valuation
8 Scurit
9 Implmentations
10 L'extension JSONP
11 Notes et rfrences
12 Annexes
12.1 Articles connexes
12.2 Liens externes

Exemple
Format JSON :

1 sur 6
JavaScript Object Notation Wikipdia https://fr.wikipedia.org/wiki/JavaScript_Object_Notation

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

{ "value": "Close", "onclick": "CloseDoc()" }

]
}
}

}
titre de comparaison, le mme 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>

Ou encore en YAML :
menu:
id: file
value: File
popup:
menuitem:
- value: New onclick:
CreateNewDoc()
- value: Open onclick:
OpenDoc()
- value: Close
onclick: CloseDoc()

Typage
Les types de base du format JSON sont les suivants :

Chane de caractres : une squence de 0 ou plus caractres unicode


Type null : une valeur vide, utilisant le mot cl null
Boolen : True ou False sont utiliss pour dfinir l'tat du boolen
Tableau
Nombre : un nombre dcimal sign qui peut contenir une part fractionnable ou leve la
puissance (notation E). Le Json n'admet pas les nombres inexistants (Nan), et ne fait aucune distinction
entre un entier et un flottant Object

Commentaires
Par dfinition, JSON est un format d'change de donnes (data interchange format), donc les commentaires,
qui sont par nature des mtadonnes (metadata), ne sont pas admis dans le format JSON par la RFC. Les
parsers JSON stricts gnreront une exception lorsqu'ils rencontrent un caractre non prvu par la
spcification, comme le / de // ou /* qui dbutent les commentaires JavaScript.
Des initiatives de formats surchargeant de commentaires le JSON comme Hjson (Human JSON)3 et des
logiciels permettant de retranscrire ces fichiers JSON avec commentaires en tant ceux-l existent.
Toutefois, ces fichiers demandant alors une tape supplmentaire avant de pouvoir tre lus par un
interprteur JSON standard, ils perdent lgrement en facilit d'interoprabilit.

2 sur 6
JavaScript Object Notation Wikipdia https://fr.wikipedia.org/wiki/JavaScript_Object_Notation

On peut toujours ajouter une proprit de l'objet reprsent par le JSON, la nommer "_comment" (un usage
qui se dveloppe), et mettre un texte (le commentaire) dans le champ valeur :
{
"_comment": "Imported from Wikidata 2015-05-27 10:13.",
"QID": "Q5502001",
"label": "Adle",
"description": "late 18th century, early 19th century French brig"
}

Durant la mise au point du format, David Crockfrod constate que certains des premiers utilisateurs du JSON
ajoutent des commentaires dans le but de donner des directives au parser4, l'image des instructions #ifdef
ou #define du prprocesseur C. Il y voit un danger pour l'interoprabilit, une priorit du format, et dcide
de les retirer4. En 2012, il s'explique sur ce choix et reconnait tre conscient de la tristesse des utilisateurs de
ne pouvoir commenter ces fichiers4.

Avantages
Ces types de donnes sont suffisamment gnriques et abstraits pour, dune part, pouvoir tre reprsents
dans nimporte quel langage de programmation, dautre part, pouvoir reprsenter nimporte quelle donne
concrte.

Le principal avantage de JSON est quil est simple mettre en uvre par un dveloppeur 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 rduite et non extensible (bien qu'il souffre de quelques limitations) ; ses types de donnes
sont connus et simples dcrire.

Inconvnients
Le JSON ne peut reprsenter que quelques types gnraux, et il n'est pas possible d'en ajouter d'autres. Pour
les dates ou les couleurs par exemple, il faut trouver des reprsentations sous forme de chanes de
caractres. C'est sa principale diffrence avec un langage comme le XML, o les donnes sont types et
extensibles, au prix d'une plus grande complexit.

Ce typage faible affaiblit la scurit et la fiabilit du langage. Par exemple il n'y a pas de limite fixe pour les
valeurs des entiers, du coup cette limite dpend de l'interprteur.

D'un point de vue plus pratique, il ne peut pas y avoir de commentaires, ce qui est gnant quand on utilise
des fichiers JSON dans une configuration. Certaines librairies acceptent les commentaires au format
JavaScript.

Utilisation
Bien quutilisant une notation JavaScript, JSON est indpendant du langage de programmation. Le site
officiel prsente (en juin 2013) des solutions dintgration de JSON pour 55 langages de programmation. Il
sert faire communiquer des applications dans un environnement htrogne. Il est notamment utilis
comme langage de transport de donnes par AJAX et les services Web. Dautres solutions sont possibles
comme XML. Le type MIME application/json est utilis pour le transmettre par le protocole HTTP.

3 sur 6
JavaScript Object Notation Wikipdia https://fr.wikipedia.org/wiki/JavaScript_Object_Notation

Vis--vis de JavaScript, un document JSON reprsente un objet, do son nom. Il est donc potentiellement
plus facile interprter quun XML qui imposera le recours des techniques, souvent plus lourdes quun
accs direct, telle que le parcours hirarchique de larbre DOM reprsent par le document entier.

Il peut aussi tre utilis pour :

la srialisation et dsrialisation dobjets ;


lencodage de documents ;
les fichiers de configuration.

valuation
En JavaScript, il est simple dvaluer une expression JSON pour la transformer en objet natif :

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

Cette mthode comporte toutefois des risques car la chane de caractres donnees_json peut contenir
nimporte quel code JavaScript. Il existe une mthode plus sre qui consiste parser la chane de caractres
donnees_json, seule solution disponible dans les autres langages de programmation, lexception de
Python, la syntaxe de JSON correspondant ses deux types principaux : les listes et les dictionnaires.

partir de 2009, les navigateurs commencent intgrer un support natif du format JSON. Cela facilite sa
manipulation, la scurit (contre lvaluation de scripts malveillants inclus dans une chane JSON), et la
rapidit de traitement. Ainsi les navigateurs Firefox 3.5, IE 8 ou encore Opera 10.5 lintgrent en natif.

valuer en JavaScript une expression JSON pour la transformer en objet se fait alors de la manire
suivante :

var donnees = JSON.parse(donnees_json);

Diffrentes bibliothques javascript permettent de supporter des navigateurs plus anciens avec une syntaxe
similaire.

Scurit
Le format JSON est largement utilis pour rcuprer des informations concernant les utilisateurs d'un site
web. Les expressions JSON sont alors envoyes au client suivant l'identit de l'utilisateur, identifi par une
session. Thoriquement, JavaScript ne permet la fonction XMLHttpRequest (utilise pour les requtes
JSON) d'effectuer des requtes que vers les URL de mme origine, ce qui empche 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
rcuprer des informations sur l'utilisateur en faisant une requte AJAX vers http://www.B.com/json.php.
Toutefois, l'appel de script par la balise <script src=""> est une exception la politique de mme origine
de
JavaScript. Une balise <script src="http://www.B.com/json.php"> insre dans le code html d'une page
de www.A.com, avec une routine JavaScript excute chaque dclaration d'un nouvel objet, permettrait le
vol de donnes 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 dbut de l'expression JSON.
Ainsi, l'analyse du code JSON sur le site d'origine restera tout fait fonctionnelle et l'excution malveillante
avec <script> depuis une page d'un domaine diffrent mnera une boucle infinie ou une erreur de
syntaxe.

4 sur 6
JavaScript Object Notation Wikipdia https://fr.wikipedia.org/wiki/JavaScript_Object_Notation

Cette technique ne fonctionne que si le document JSON n'est pas un objet (un objet n'est pas un script
valide) et que le navigateur permet de modifier les constructeurs de tableau (ce qui ne fonctionne plus avec
les navigateurs rcents).

Implmentations
Des bibliothques pour JSON existent dans la plupart des langages de programmation.

L'extension JSONP
JSONP pour JSON with padding (en franais, JSON
avec formatage ) est une extension dans laquelle le nom
de la fonction de retour est indiqu. Lide originale JSONP
proviendrait du blog de Bob Ippolito en 20055 et est
maintenant rpandue dans les applications Web 2.0, telle
que Googles toolkit Applications6. Des amliorations
sont prvues pour y ajouter des arguments7.

JSONP utilise des balises de scripts, les appels sont


ouverts. Ainsi, JSONP peut tre inappropri pour
transporter des informations confidentielles.
Logo de JSONP.

Notes et rfrences
1. wikt:JSON#Nom commun
2. en:JSON
3. Hjson, the Human JSON (http://hjson.org/), sur Hjson,
2014 (consult le 27 mai 2015)
4. Douglas Crockford, Comments in JSON
(https://plus.google.com/+DouglasCrockfordEsq/posts Logo de JSON.
/RK8qyGVaGSr), sur Publications du compte Google+ de
Douglas Crockford, 1er mai 2012 (consult le 27 mai 2015) Caractristiques
5. (en) Remote JSON - JSONP (http://bob.ippoli.to
Extension .jsonp
/archives/2005/12/05/remote-json-jsonp/), 5 dcembre 2005.
6. (en) GWT Tutorial: How to Read Web Services Client- Type MIME application/json-p
Side with JSONP (http://www.gwtapps.com /?p=42).
PUID fmt/817
7. (en) JSONPP (http://sites.google.com/a/s3db.org
/s3db/documentation/mis/json-jsonp-jsonpp), 11 juin 2008. (https://www.nationalarchive
s.gov.uk/pronom/fmt/817)
Type de format srialisation d'informations
Annexes Extension du JavaScript
Articles connexes
Site web json.org (http://json.org)

Sur les autres projets Wikimedia :

5 sur 6
JavaScript Object Notation Wikipdia https://fr.wikipedia.org/wiki/JavaScript_Object_Notation

BSON (Binary JSON) : un format tendant les possibilits du JSON (donnes temporelles, binaires, etc.),
notamment utilis par MongoDB ; TopoJSON : un format de stockage des donnes topologiques ;
GeoJSON : un format de stockage des
donnes gographiques ; YAML : un autre JSON (https://commons.wikimedia.org
langage de srialisation de donnes.
/wiki/Category:JavaScript_Object_Notation?uselang=fr),
sur Wikimedia Commons
Liens externes
JSON, sur le Wiktionnaire JSON, sur Wikibooks
(en) Site officiel (http://www.JSON.org)
(en) RFC 4627, The application/json JSON, sur Wikidata
Media Type for JavaScript Object Notation
(JSON), D. Crockford, juillet 2006
(en) Formateur et validateur JSON (http://jsonformatter.curiousconcept.com)
(en) Validateur en ligne JSON (http://www.webtoolkitonline.com/json-tester.html)
(en) Formateur en ligne JSON (http://www.webtoolkitonline.com/json-formatter.html)
(en) Minifieur en ligne JSON (http://www.webtoolkitonline.com/json-minifier.html)
JSON.minify (http://github.com/getify/JSON.minify) est une bibliothque, disponible pour plusieurs
langages de programmation, qui supprime les espaces inutiles ainsi que les commentaires pour obtenir un
fichier JSON valide.

Ce document provient de https://fr.wikipedia.org/w/index.php?title=JavaScript_Object_Notation&


oldid=134824205 .

Dernire modification de cette page le 23 fvrier 2017, 23:13.


Droit d'auteur : les textes sont disponibles sous licence Creative Commons attribution, partage dans les
mmes conditions ; dautres conditions peuvent sappliquer. Voyez les conditions dutilisation pour plus de
dtails, ainsi que les crdits graphiques. En cas de rutilisation des textes de cette page, voyez comment citer
les auteurs et mentionner la licence.
Wikipedia est une marque dpose de la Wikimedia Foundation, Inc., organisation de bienfaisance rgie
par le paragraphe 501(c)(3) du code fiscal des tats-Unis.

6 sur 6