JavaScript Object Notation
JavaScript Object Notation (JSON) est un format de données textuel dérivé de la notation des objets du langage JavaScript. Il concurrence XML pour la représentation et la transmission d’information structurée[1].
Imaginé par Douglas Crockford, le format JSON a été introduit pour la première fois sur la page json.org en 2001[2]. Cette démarche a conduit à sa standardisation ultérieure sous la norme ECMA-404 d'Ecma International, dont la première édition a été publiée en octobre 2013[2]. Une deuxième édition de la norme a été publiée en décembre 2017[3].
Il est également décrit par la RFC 8259[4] publiée en 2017 par l’Internet Engineering Task Force, qui remplace notamment les RFC 4627[5] et RFC 7159[6] et se veut compatible avec ECMA-404[7]
Des bibliothèques pour le format JSON existent dans de nombreux langages de programmation[8][7].
Caractéristiques#edit
Un texte en JSON peut contenir[9][8] [7] :
- deux types composés :
- quatre types scalaires :
- des booléens, qui prennent la valeur
trueoufalse; - des nombres, écrits en notation décimale et pouvant comporter une partie fractionnaire ou un exposant. JSON n'admet ni les nombres inexistants (NaN) ni les valeurs infinies et ne distingue pas les entiers des nombres à virgule flottante ;
- des chaînes de caractères, constituées d'une séquence de zéro ou plusieurs caractères Unicode et obligatoirement entourées de guillemets doubles ;
- la valeur null, qui qualifie l'absence de valeur.
- des booléens, qui prennent la valeur
Chacun de ces types peut être utilisé pour constituer un document[7].
Exemple#edit
Exemple de texte au format JSON :
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{ "value": "New", "onclick": "CreateNewDoc()" },
{ "value": "Open", "onclick": "OpenDoc()" },
{ "value": "Close", "onclick": "CloseDoc()" }
]
}
}
}
Équivalent au format XML :
<menu id="file" value="File">
<popup>
<menuitem value="New" onclick="CreateNewDoc()"/>
<menuitem value="Open" onclick="OpenDoc()"/>
<menuitem value="Close" onclick="CloseDoc()"/>
</popup>
</menu>
Équivalent au format YAML :
menu:
id: file
value: File
popup:
menuitem:
- value: New
onclick: CreateNewDoc()
- value: Open
onclick: OpenDoc()
- value: Close
onclick: CloseDoc()
Commentaires#edit
JSON est un format d'échange de données dont la syntaxe définie par la RFC n'admet pas les commentaires[7]. Un analyseur syntaxique JSON strict détecte une erreur s'il rencontre un caractère ou une construction non prévu par la spécification.
Il existe des initiatives de formats étendant JSON pour ajouter des commentaires, comme Hjson[10], pour Human JSON en anglais, ou JSON5[11]. Ces formats permettent de restituer du JSON standard, mais nécessitent un analyseur compatible avec leur syntaxe propre[12].
Durant la mise au point du format, Douglas Crockford constate que certains des premiers utilisateurs du JSON ajoutent des commentaires dans le but de donner des directives au parseur[13], à l'image des instructions #ifdef ou #define du préprocesseur C. Il y voit un danger pour l'interopérabilité, une priorité du format, et décide de les retirer[13]. En 2012, il s'explique sur ce choix et reconnaît être conscient de la gêne que cette absence peut occasionner[13].
Usages#edit
Bien qu’utilisant une notation issue de JavaScript, JSON est indépendant du langage de programmation[2]. De nombreux langages de programmation disposent d'outils permettant de le lire ou de le produire[7]. JSON sert à faire communiquer des applications dans un environnement hétérogène. Il est notamment utilisé comme format de transport de données avec AJAX et les services Web. D’autres solutions sont possibles, comme XML.
Le type de média MIME application/json est enregistré pour le transmettre notamment par le protocole HTTP[7].
Lorsqu'un texte JSON est échangé entre des systèmes qui ne font pas partie d'un même environnement fermé, la RFC 8259 impose l'utilisation de l'encodage UTF-8[7].
Un document JSON n'est pas nécessairement un tableau associatif : sa valeur de plus haut niveau peut être un objet, un tableau, une chaîne de caractères, un nombre, un booléen ou null[7].
Il peut aussi être utilisé pour :
- la sérialisation et la désérialisation de structures de données ;
- l’encodage de documents ;
- l'encodage de données structurées ;
- les fichiers de configuration.
La correspondance entre les valeurs JSON et les types natifs varie selon les langages de programmation. Par exemple, avec le module json de la bibliothèque standard de Python[14] :
- les objets JSON correspondent notamment aux dictionnaires (
dict) ; - les tableaux JSON correspondent notamment aux listes (
list) ; - les chaînes de caractères JSON correspondent aux chaînes Python ;
- les booléens
trueetfalsecorrespondent respectivement àTrueetFalse; - la valeur
nullcorrespond àNone.
Évaluation#edit
En JavaScript, il est possible d'utiliser la fonction eval() pour interpréter certains textes JSON :
var donnees = eval('('+donnees_json+')');
Cette méthode comporte toutefois des risques car la chaîne de caractères donnees_json peut contenir du code JavaScript exécutable. La RFC 8259 considère l'utilisation d'eval() pour analyser du JSON comme un risque de sécurité et recommande l'emploi d'un analyseur dédié[7].
À partir de 2009, les navigateurs commencent à intégrer un support natif du format JSON. Cela facilite sa manipulation et évite d'avoir recours à eval(). Ainsi les navigateurs Firefox 3.5, IE 8 ou encore Opera 10.5 l’intègrent en natif[15].
Analyser en JavaScript une chaîne JSON peut alors se faire avec JSON.parse() :
var donnees = JSON.parse(donnees_json);
L'objet standard JSON, qui comprend notamment les méthodes JSON.parse() et JSON.stringify(), a été intégré à la cinquième édition de la norme ECMAScript, publiée en décembre 2009[16].
Différentes bibliothèques JavaScript ont également permis de prendre en charge les navigateurs plus anciens avec une syntaxe similaire.
Extensions du format#edit
JSONL#edit
Le format JSONL est une implémentation de JSON ligne-à-ligne[17][18]. Chaque ligne contient une valeur JSON valide[17].
JSONL (JSON Lines) est également rapproché du format NDJSON (Newline Delimited JSON), dans lequel les textes JSON sont séparés par des retours à la ligne[19].
JSONP#edit
JSONP ou JSON-P (pour JSON with Padding, en français « JSON avec remplissage ») est une technique dans laquelle des données JSON sont incluses dans un appel à une fonction JavaScript[20].
L’idée a été proposée par Bob Ippolito en 2005[21]. Elle permettait notamment à une page Web de charger des données depuis une autre origine par l'intermédiaire d'une balise <script>[21].
Cette technique s'est répandue dans des applications du Web 2.0, notamment dans certains outils destinés à Google Web Toolkit[22].
Une extension appelée JSONPP a également été proposée afin d'ajouter des paramètres supplémentaires à ce principe[23].
JSONP repose sur l'exécution d'un script provenant d'une autre origine et peut donc présenter des risques lorsqu'il est utilisé pour transmettre des informations sensibles. L'OWASP recommande notamment de ne pas activer JSONP afin d'éviter certaines attaques par inclusion de scripts provenant d'un autre site[24].
JSON5#edit
JSON5 est une extension de la syntaxe de JSON, destinée à rendre son écriture manuelle plus souple[11].
Spécifications#edit
Par rapport à JSON, JSON5 autorise notamment[11] :
- certains noms de champs sans guillemets ;
- les commentaires sur une ou plusieurs lignes ;
- une virgule finale dans les objets et les tableaux ;
- les nombres représentés au format hexadécimal ;
- les nombres précédés du signe positif (
+) ; - les valeurs
Infinityet NaN ; - des caractères d'espacement supplémentaires ;
- les chaînes de caractères délimitées par des apostrophes ;
- certaines chaînes de caractères réparties sur plusieurs lignes.
HJSON#edit
HJSON est une extension de la syntaxe JSON destinée notamment aux fichiers de configuration et aux données devant être lues ou modifiées directement par une personne[10][25].
Spécifications#edit
Hjson permet notamment[25] :
- de séparer les champs par un retour à la ligne au lieu d'une virgule ;
- d'écrire des commentaires avec
#,//ou/* ... */; - d'omettre les guillemets autour de certaines clés et chaînes de caractères ;
- d'utiliser des virgules finales ;
- d'écrire des chaînes de caractères sur plusieurs lignes ;
- d'omettre les accolades entourant l'objet situé à la racine dans certains cas.
Annexes#edit
Articles connexes#edit
- BSON (Binary JSON) : un format étendant les possibilités du JSON (données temporelles, binaires, etc.), notamment utilisé par MongoDB ;
- TopoJSON : un format de stockage des données topologiques ;
- GeoJSON : un format de stockage des données géographiques ;
- YAML : un autre langage de sérialisation de données ;
- JSON-LD (pour JavaScript Object Notation for Linked Data) est un standard du W3C pour structurer des données liées sur le Web en utilisant JSON[26][27][28].
Liens externes#edit
Références#edit
- ^ « Structuration des donnees : XML et JSON », sur wdi.supelec.fr (consulté le 29 août 2026).
- ^ a b c ECMA International, Standard ECMA-404 : The JSON Data Interchange Syntax, 114 Rue du Rhône, CH-1204 Geneva, ECMA International, 2017, 2e éd., 16 p. (lire en ligne), Introduction
- ^ (en) « ECMA-404 — The JSON data interchange syntax », sur Ecma International (consulté le 29 septembre 2026)
- ^ (en) Tim Bray, « RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format », Request for comments no 8259, 13 décembre 2017
- ^ (en) Request for comments no 4627
- ^ (en) Request for comments no 7159
- ^ a b c d e f g h i j RFC 8259
- ^ a b « JSON », sur www.json.org (consulté le 29 août 2026).
- ^ Stéphane Crozat, Julien Jerphanion, Harold Carrel-Billiard, Maxime Uzan et Cécile Fecherolle, « JavaScript Object Notation [Introduction aux bases de données NoSQL] », sur librecours.net via Internet Archive (consulté le 29 août 2026).
- ^ a b (en) « Hjson, a user interface for JSON », sur hjson.github.io (consulté le 29 août 2026).
- ^ a b c (en) « The JSON5 Data Interchange Format », sur JSON5 (consulté le 29 septembre 2026)
- ^ (en) « Hjson Syntax », sur Hjson (consulté le 29 septembre 2026)
- ^ a b c (en) « Comments in JSON », sur google.com via Internet Archive (consulté le 29 août 2026)
- ^ « json — Encodage et décodage JSON », sur Documentation Python, Python Software Foundation (consulté le 29 septembre 2026)
- ^ (en) « Can I use... JSON parsing », sur caniuse.com (consulté le 29 août 2026).
- ^ (en) « ECMA-262, 5th edition, December 2009 », sur Ecma International, décembre 2009 (consulté le 29 septembre 2026), p. 15.12
- ^ a b « JSON Lines », sur jsonlines.org (consulté le 18 mars 2026)
- ^ (en) Andy Brudtkuhl, « What is JSONL? An Introduction to JSON Lines Format », sur jsonltools.com (consulté le 18 mars 2026)
- ^ (en) ndjson, « Update specification_draft2.md · ndjson/ndjson-spec@c658c26 », sur GitHub (consulté le 18 mars 2026)
- ^ « Une requête inter-domaine à l'aide de JSONP »(Archive.org • Wikiwix • Que faire ?), sur www.journaldunet.com (consulté le 5 février 2020).
- ^ a b (en) « Remote JSON - JSONP », sur ippoli.to, 5 décembre 2005 (consulté le 29 août 2026).
- ^ (en) « GWT Tutorial : How to Read Web Services Client-Side with JSONP », sur gwtapps.com via Internet Archive (consulté le 29 août 2026).
- ^ (en) « JSONPP », 11 juin 2008.
- ^ (en) « Cross Site Script Inclusion », sur OWASP Web Security Testing Guide (consulté le 29 septembre 2026)
- ^ a b (en) « The Human JSON (Hjson) Configuration Format », sur Hjson (consulté le 29 septembre 2026)
- ^ (en) W3C, « The JSON-LD Vocabulary », sur w3.org, 3 janvier 2020 (consulté le 29 août 2026).
- ^ (en) « Home - schema.org », sur schema.org (consulté le 29 août 2026).
- ^ (en) W3C, « JSON-LD 1.1 — A JSON-based Serialization for Linked Data », sur W3C, 16 juillet 2020 (consulté le 29 septembre 2026)
- Portail de l’informatique
- Portail de la programmation informatique
This article is mirrored from “JavaScript Object Notation” on Français Wikipedia, revision 240059910, written by Wikipedia's contributors and licensed CC BY-SA 4.0. Editing it here creates a Quire copy with its own history.
Synced with Wikipedia revision 240059910 · just now