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

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

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