Aller au contenu

Programmation JavaScript/Notation JSON

Un livre de Wikilivres.
Logo 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.

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
  • un booléen (false ou true),
  • un nombre entier (ex : 123),
  • un nombre à virgule flottante (ex : 123.456, 12345.6E-3),
  • une chaîne de caractères (ex : "Exemple de chaîne").
[ 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.

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... ]

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

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.

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"
    }
]
  • 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 :
'{
    "name": "test",
    "age": 22
}'

Convertisseurs JSON :

Bases de données JSON :

  1. https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
  2. https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify