Cet article aborde l'objet JSON natif conforme à ECMAScript 5 qui a été ajouté à Gecko 1.9.1. Pour consulter les informations de base sur l'utilisation de JSON dans les versions précédentes de Firefox, consulter la page JSON.
L'objet natif JSON possède deux méthodes clés. La méthode JSON.parse()
qui analyse une chaîne de caractères JSON et qui reconstruit l'objet JavaScript original. La méthode JSON.stringify()
, quant à elle, accepte un objet JavaScript et renvoie son équivalent JSON.
TypeError
.Analyser (parser) les chaînes JSON
Afin de convertir une chaîne JSON en un objet JavaScript, il suffit de passer une chaîne JSON à la méthode JSON.parse()
:
var objetJS = JSON.parse(chaineJSON);
JavaScript 1.8.5 note
À partir de JavaScript 1.8.5 (Firefox 4), JSON.parse()
n'accepte pas les virgules en fin de chaîne
// ces deux instructions renverront une exception SyntaxError
// à partir de JavaScript 1.8.5
var objetJS = JSON.parse("[1, 2, 3, 4, ]");
var objetJS = JSON.parse("{ \"toto\" : 1, }");
Convertir les objets en JSON
Afin de convertir un objet JavaScript en une chaîne JSON, il suffit de passer l'objet à la méthode JSON.stringify()
:
var toto = {}; toto.truc = "nouvelle propriété"; toto.machin = 3; var chaineJSON = JSON.stringify(toto);
chaineJSON
contient désormais '{"truc":"nouvelle propriété","machin":3}'
.
Depuis Firefox 3.5.4, JSON.stringify()
permet d'adapter la conversion grâce à des paramètres optionnels. La syntaxe est la suivante :
chaineJSON = JSON.stringify(valeur [, remplacement [, espace]])
remplacement
-
valeur
- L'objet JavaScript à convertir en une chaîne JSON.
-
remplacement
-
Une fonction qui modifie le comportement de la conversion ou bien un tableau d
'objets
String
etNumber
qui sera utilisé comme une liste de propriétés de l'objetvaleur
à inclure dans la chaîne JSON. Si cette valeur est nulle ou n'est pas fournie, toutes les propriétés de l'objet seront inclues dans la chaîne résultante. -
espace
-
Un objet
ouString
Number
utilisé pour insérer des espaces dans la chaîne JSON afin qu'elle soit plus lisible. Si c'est un objetNumber
, il indique le nombre d'espaces à insérer. Ce nombre est limité à 10. Les valeurs inférieures à 1 indiquent qu'aucun espace ne sera utilisé, les valeurs supérieures à 10 seront ramenées à 10. Si cet objet est uneString
, la chaîne de caractères (ou les 10 premiers caractères si la chaîne est plus longue) à utiliser comme blanc. Si ce paramètre n'est pas fourni (ou vautnull
), aucun blanc ne sera utilisé.
Le paramètre de remplacement
La paramètre remplacement
peut être une fonction ou un tableau. Si c'est une fonction, elle prendra deux paramètres : la clé et la valeur à être convertie en chaîne de caractères. L'objet pour lequel la clé a été trouvée sera fourni comme paramètre this
de la fonction de remplacement. Initialement elle est appelée avec une clé vide représentant l'objet à transformer en chaîne et est ensuite appelé pour chacune des propriétés de l'objet ou du tableau à convertir. Elle doit renvoyer la valeur à ajouter à la chaîne de caractère JSON comme suit :
- Si on renvoie un
Number
, la chaîne correspondante à ce nombre est utilisée pour la valeur de la propriété de à ajouter à la chaîne JSON. - Si on renvoie une
String
, cette chaîne est utilisée comme la valeur de la propriété à ajouter à la chaîne JSON. - Si on renvoie un
Boolean
, "true" ou "false" est utilisé comme la valeur de la propriété à ajouter à la chaîne JSON. - Si on renvoie n'importe quel autre objet, il est alors transformé en chaîne JSON de façon récursive en appelant la même fonction de remplacement sur chacune de ses propriétés sauf si l'objet est une fonction, auquel cas on n'ajoute rien à la chaîne JSON.
- Si la valeur de retour est
undefined
, la propriété n'est pas incluse dans la chaîne résultante.
undefined
ou une fonction est renvoyée : null
sera renvoyé.Exemple
function censure(key, value) { if (typeof value === "string") { return undefined; } return value; } var toto = {fondation: "Mozilla", modèle: "box", semaine: 45, transport: "voiture", mois: 7}; var chaineJSON = JSON.stringify(toto, censure);
La chaîne JSON produite sera {"semaine":45,"mois":7}
.
Si remplacement
est un tableau, les valeurs du tableau indiquent les noms des propriétés de l'objet à inclure dans la chaîne JSON.