(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 publiée en 2017 par l’Internet Engineering Task Force, qui remplace notamment les et et se veut compatible avec ECMA-404
Des bibliothèques pour le format JSON existent dans de nombreux langages de programmation..
Caractéristiques
Un texte en JSON peut contenir. :
deux types composés : des objets, ou ensembles de paires « nom » (ou « clé ») / « valeur » ; des listes ordonnées de valeurs (tableaux) ; quatre types scalaires : des booléens, qui prennent la valeur true ou false ; 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 , qui qualifie l'absence de valeur.
Chacun de ces types peut être utilisé pour constituer un document.
Exemple 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 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.
Usages
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 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 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 :
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 true et false correspondent respectivement à True et False ; la valeur null correspond à None.
Évaluation
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 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.
Extensions du format
JSONL
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
JSONP ou JSON-P (pour , 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 , 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
JSON5 est une extension de la syntaxe de JSON, destinée à rendre son écriture manuelle plus souple.
Spécifications
Par rapport à JSON, JSON5 autorise notamment :
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 Infinity et 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
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.
Spécifications
Hjson permet notamment :
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
Articles connexes
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...
Liens externes
JSON5 HJSON JSONP
Références
Catégorie:Format de sérialisation de données Catégorie:JavaScript Catégorie:Format ouvert