Professional Documents
Culture Documents
org/wiki/JavaScript_Object_Notation
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()" },
]
}
}
}
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 :
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.
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.
valuation
En JavaScript, il est simple dvaluer une expression JSON pour la transformer en objet natif :
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 :
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.
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)
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.
6 sur 6