| Extension | .json |
|---|---|
| Type MIME | application/json |
| PUID | |
| Développé par | |
| Version initiale |
2001 |
| Type de format |
Texte |
| Basé sur | |
| Norme |
RFC 8259 et ECMA-404 |
| Spécification | |
| Site web |
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.
Imaginé par Douglas Crockford, le format JSON a été introduit pour la première fois sur la page json.org en 2001. 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 . Une deuxième édition de la norme a été publiée en décembre 2017.
Il est également décrit par la RFC 8259 publiée en 2017 par l’Internet Engineering Task Force, qui remplace notamment les RFC 4627 et RFC 7159 et se veut compatible avec ECMA-404
Des bibliothèques pour le format JSON existent dans de nombreux langages de programmation,.
Un texte en JSON peut contenir,, :
true ou false ;Chacun de ces types peut être utilisé pour constituer un document.
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()
JSON est un format d'échange de données dont la syntaxe définie par la RFC n'admet pas les commentaires. 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, pour Human JSON en anglais, ou JSON5. Ces formats permettent de restituer du JSON standard, mais nécessitent un analyseur compatible avec leur syntaxe propre.
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, à 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. En 2012, il s'explique sur ce choix et reconnaît être conscient de la gêne que cette absence peut occasionner.
Bien qu’utilisant une notation issue de JavaScript, JSON est indépendant du langage de programmation. De nombreux langages de programmation disposent d'outils permettant de le lire ou de le produire. 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.
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.
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.
Il peut aussi être utilisé pour :
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 :
dict) ;list) ;true et false correspondent respectivement à True et False ;null correspond à None.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é.
À 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.
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.
Différentes bibliothèques JavaScript ont également permis de prendre en charge les navigateurs plus anciens avec une syntaxe similaire.
Le format JSONL est une implémentation de JSON ligne-à-ligne,. Chaque ligne contient une valeur JSON valide.
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.
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.
L’idée a été proposée par Bob Ippolito en 2005. Elle permettait notamment à une page Web de charger des données depuis une autre origine par l'intermédiaire d'une balise <script>.
Cette technique s'est répandue dans des applications du Web 2.0, notamment dans certains outils destinés à Google Web Toolkit.
Une extension appelée JSONPP a également été proposée afin d'ajouter des paramètres supplémentaires à ce principe.
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.
JSON5 est une extension de la syntaxe de JSON, destinée à rendre son écriture manuelle plus souple.
Par rapport à JSON, JSON5 autorise notamment :
+) ;Infinity et NaN ;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,.
Hjson permet notamment :
#, // ou /* ... */ ;