Le format JSON, ou JavaScript Object Notation, est un format simple d'échange de données constitué de paires nom,valeur. Ce format a de particulier sa grande simplicité, et la facilité avec laquelle il s'intègre à du code JavaScript. On doit ce format à Douglas Crockford.
Un exemple de d'objet JSON serait :
var exemple = {
"cours" : {
"sigle" : "420KEF",
"nom" : "Élaboration d'applications dans un environnement graphique"
},
"prof" : "Votre chic prof"
};
Il est possible de manipuler un tel objet un peu comme on manipulerait des objets dans d'autres langages conventionnels. Par exemple :
var exemple = {
"cours" : {
"sigle" : "420KEF",
"nom" : "Élaboration d'applications dans un environnement graphique"
},
"prof" : "Votre chic prof"
};
// on suppose ici une zone portant l'identifiant "nomDuProf"
document.getElementById("nomDuProf").innerHTML = '<strong>' + exemple.prof + '</strong>';
// on suppose ici une zone portant l'identifiant "sigleDuCours"
document.getElementById("sigleDuCours").innerHTML = '<em>' + exemple.cours.sigle + '</em>';
Dans cet exemple, la variable exemple contient deux attributs : cours et prof. La valeur de prof est "Votre chic prof" alors que la valeur de cours est un objet JSON à part entière. L'accès à un élément d'un objet JSON se fait à l'aide du « . », comme c'est le cas dans bien des langages.
Outre accéder aux éléments d'un objet JSON directement, comment peut-on manipuler du JSON dont on ne connaît pas la structure a priori?
Explication | Code | Tester le tout |
---|---|---|
Afficher du JSON brut donne des résultats mitoyens. Par exemple, le bouton « Brut » à droite affiche le JSON brut de la variable exemple proposée plus haut. Vous verrez que ce n'est probablement pas l'affichage souhaité. |
|
|
Afficher du JSON « stringifié », ou transformé en une chaîne de caractères, est plus agréable pour des humains. Par exemple, le bouton « Stringifié » à droite affiche résultat d'une telle transformation sur la variable exemple proposée plus haut. |
|
Il est bien sûr possible pour un « attribut » d'un objet JSON d'être un tableau :
var sessionDePat = {
cours : [
{ sigle: "420KEF", nom: "Élaboration d'applications dans un environnement graphique" },
{ sigle: "420KH2", nom: "Systèmes temps réel" },
{ sigle: "PIRD", nom: "Dégagement pour la réussite" }
],
session : "H2014"
};
Outre la création statique de JSON, à même le code source, tel que présenté plus haut, il est possible de créer dynamiquement du JSON. Dans les exemples ci-dessous, on supposera que s contient une chaîne de caractères décrivant un objet JSON, par exemple...
var s = "{ nom: 'valeur' }"
...et que nos souhaitons créer un objet JSON nommé jsonObj.
Explication | Code |
---|---|
Procéder en évaluant s avec le compilateur JavaScript peut se faire à l'aide de la fonction eval. Ceci peut être dangereux, permettant d'exécuter une chaîne de caractères arbitraire, alors ne faites ceci qu'avec extrême prudence. Si s est une expression malformée, une exception sera levée. |
|
Procéder en évaluant s avec un processeur JSON tel que JSON.parse est mieux, car dans ce cas, seul une chaîne décrivant un objet JSON légitime pourra être consommée, alors qu'avec eval, il est possible d'évaluer n'importe quelle chaîne de caractères valide en JavaScript. Notez que ces processeurs ne supportent pas de structures cycliques, comme dans le cas d'un objet a menant vers un objet b qui, lui, mènera vers a. Si s est une expression malformée, une exception sera levée. |
|
Dans le cas du processeur JSON, il est possible de suppléer un deuxième paramètre à la fonction JSON.parse. Dans ce cas, cette fonction doit accepter deux paramètres, représentant la « clé » et la « valeur ». Le rôle d'une telle fonction est de transformer la valeur. Puisque la structure des objets JSON permet à un objet JSON de contenir des objets JSON, le traitement des objets JSON est récursif, et la racine a pour clé "". L'usage veut que ce cas retourne la valeur telle quelle. L'exemple à droite transformera les nombres 1, 2 et 3 en leurs carrés 1, 4 et 9. |
|
Le format JSON remplace le format XML dans une vaste gamme de cas d'application. Plus simple à manipuler, plus léger, plus près des besoins des programmeuses et des programmeurs, il allège fortement la tâche de développement en comparaison avec la compétition.
Divers liens pour enrichir le propos.
Il existe des alternatives à JSON, outre des formats XML tels que SOAP ou XML-RPC :