< Programmation JavaScript
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.

Tableau

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" ];

É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

Un objet Javascript est en réalité une table associant un nom (attribut ou clé) à une valeur.

Exemple :

var article = new Object();
article.nom = "Livre";
article.prix_unitaire = 21.99;
article.quantite = 2;

Variante :

function Article(nom, prix_unitaire, quantite)
{
    this.nom = nom;
    this.prix_unitaire = prix_unitaire;
    this.quantite = quantite;
    this.resume = function(){
        return this.nom+" x "+this.quantite+" à "+this.prix_unitaire+
           " l'unité coûte(nt) "+( this.quantite*this.prix_unitaire );
    }
    return this;
}
var article = new Article( "Livre", 21.99, 2);

Pour accéder au nom de l'article :

alert( "L'article est : " + article.nom ); // syntaxe objet
alert( "L'article est : " + article["nom"] ); // syntaxe table associative

La notation abrégée utilise une série d'association nom-valeur entre accolades :

{ nom : valeur , nom : valeur , ... }

Exemple :

var article = {
    "nom" : "Livre",
    "prix_unitaire" : 21.99,
    "quantite" : 2,
    "resume" : function(){
        return this.nom+" x "+this.quantite+" à "+this.prix_unitaire+
           " l'unité coûte(nt) "+( this.quantite*this.prix_unitaire );
    }
};

Le nom peut se passer des guillemets s'il suit la syntaxe des identificateurs :

var article = {
    nom : "Livre",
    prix_unitaire : 21.99,
    quantite : 2,
    resume : function(){
        return this.nom+" x "+this.quantite+" à "+this.prix_unitaire+
           " l'unité coûte(nt) "+( this.quantite*this.prix_unitaire );
    }
};

Imbrications

Il est possible de déclarer des tableaux d'objets, des objets contenant des tableaux ou d'autres objets, ...

Exemple complexe :

var commandes = [
    { "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"
    }
];

Voir aussi

Convertisseurs JSON :

Bases de données JSON :

Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.