Programmation JavaScript/Notation JSON

La notation objet du langage Javascript JSON (JavaScript Object Notation en anglais) permet de déclarer des objets en donnant la valeur des membres. Cette notation concerne également les tableaux qui sont considérés comme des objets.
Elle abrĂšge la dĂ©claration de donnĂ©es en permettant de donner toutes les valeurs d'un objet ou d'un tableau en une seule expression. Cette expression peut, par exemple, ĂȘtre passĂ©e en paramĂštre d'une fonction.
Contrairement Ă sa principale alternative, le XML, cette notation ne comprend aucun en-tĂȘte et est toujours encodĂ©e en UTF8.
Un autre avantage de ce format par rapport au XML, quand il est utilisĂ© pour un Ă©change de donnĂ©es (RPC, REST, ...) : les donnĂ©es sont typĂ©es, ce qui signifie que les donnĂ©es sont directement interprĂ©tĂ©es en javascript (entiers, boolĂ©en, chaĂźne de caractĂšres, ...), contrairement au XML oĂč toutes les donnĂ©es sont des chaĂźnes de caractĂšres Ă interprĂ©ter explicitement dans le code.
Syntaxe
[modifier | modifier le wikicode]Le format JSON est un sous-ensemble de la syntaxe du langage JavaScript décrivant les données de type booléen, nombre (entier et à virgule flottante), chaßne de caractÚre, objet et tableau.
Syntaxe | Type | Description |
---|---|---|
valeur | Booléen / Nombre / Chaßne de caractÚres |
|
[ item1 , item2 , ... ] | Tableau | Un tableau est représenté par la liste des items séparés par des virgules, encadrée par des crochets. |
{ clĂ©1 : valeur1 , clĂ©2 : valeur2 , ... } | Objet | Un objet est reprĂ©sentĂ© par la liste des associations clĂ©s et valeurs sĂ©parĂ©es par des virgules, encadrĂ©e par des accolades. Les clĂ©s doivent ĂȘtre d'un type supportĂ© par le format (un des types de cette table). Elle ne peut pas ĂȘtre un mot sans guillemets, qui n'est acceptĂ© que par le langage JavaScript. |
Le nombre restreint de types de données participe au fait que ce format est trÚs utilisé avec beaucoup de langage de programmation car il est facile de faire un interpréteur et un encodeur pour ce format. JSON a aussi inspiré beaucoup d'autres formats de sérialisation des données.
Tableau
[modifier | modifier le wikicode]Un tableau est en réalité une forme spéciale d'objet.
Pour preuve, la fonction typeof(...)
retourne le type "object"
quand on lui passe un tableau.
La syntaxe abrégée pour déclarer le contenu d'un tableau utilise une série de valeurs entre crochets :
[ valeur, valeur... ]
OĂč valeur est une expression dont le type peut ĂȘtre quelconque (entier, chaĂźne de caractĂšres, tableau, objet, ...).
Exemple :
var fruits = [ "pomme", "orange", "pamplemousse" ];
Hors code javascript, dans un fichier de données au format JSON, il n'y a pas de déclaration de variable ou de point-virgule à la fin :
[ "pomme", "orange", "pamplemousse" ]
Ăquivalent sans la notation :
var fruits = new Array();
fruits[0] = "pomme";
fruits[1] = "orange";
fruits[2] = "pamplemousse";
Variante :
var fruits = new Array();
fruits.push( "pomme" );
fruits.push( "orange" );
fruits.push( "pamplemousse" );
Il est possible d'imbriquer les tableaux, c'est à dire déclarer un tableau de tableaux :
var parfums_glaces = [
[ "chocolat", "vanille" ],
[ "fraise" ],
[ "framboise", "cassis" ]
];
Tous les Ă©lĂ©ments d'un tableau ne sont pas obligatoirement du mĂȘme type :
var article = [ "Livre", 21.99 ]; // nom et prix
Objet
[modifier | modifier le wikicode]Un objet Javascript est en réalité une table associant un nom (attribut ou clé) à une valeur.
La notation JSON utilise une série d'association nom-valeur entre accolades :
{ nom : valeur , nom : valeur , ... }
Exemple :
{
"nom" : "Livre",
"prix_unitaire" : 21.99,
"quantite" : 2
}
Contrairement Ă Javascript, la notation au format JSON n'accepte pas les clĂ©s sans guillemets ni les fonctions car les clĂ©s doivent ĂȘtre d'un type supportĂ© par JSON.
Imbrications
[modifier | modifier le wikicode]Il est possible de déclarer des tableaux d'objets, des objets contenant des tableaux ou d'autres objets, ...
Exemple complexe :
[
{ "client": "Jean",
"articles": [
{ "nom": "Livre", "quantite": 2, "prix_unitaire": 21.99 } ,
{ "nom": "Stylo", "quantite": 4, "prix_unitaire": 0.79 }
],
"mode_paiement": "chĂšque"
},
{ "client": "Pierre",
"articles": [
{ "nom": "Livre", "quantite": 1, "prix_unitaire": 21.99 } ,
{ "nom": "Trombones", "quantite": 50, "prix_unitaire": 0.05 }
],
"mode_paiement": "espĂšces"
}
]
Conversions
[modifier | modifier le wikicode]- JSON.parse()[1] : convertit un JSON en objet ou tableau JS.
- JSON.stringify()[2] : convertit un objet ou un tableau JS en JSON.
- Pour le pretty-print, on peut indiquer le nombre d'espace d'indentation en paramĂštre 3. Ex :
JSON.stringify({ name: 'test', age: 22 }, null, 4);
donne la chaine de caractĂšres :
- Pour le pretty-print, on peut indiquer le nombre d'espace d'indentation en paramĂštre 3. Ex :
'{ "name": "test", "age": 22 }'
Voir aussi
[modifier | modifier le wikicode]Convertisseurs JSON :
Bases de données JSON :