La méthode JSON.parse()
parse une chaîne de caractères en JSON et construit la valeur JavaScript ou l'objet décrit par cette chaîne. On peut éventuellement utiliser cette fonction avec un paramètre de modification permettant de traiter l'objet avant qu'il soit renvoyé.
Syntaxe
JSON.parse(texte[, reviver])
Paramètres
texte
- La chaine de caractère à analyser comme du JSON. Voir l'objet
JSON
pour une description de la syntaxe JSON. reviver
- Si l'argument est une fonction, effectue une opération de transformation sur la valeur analysée avant de la renvoyer.
Valeur de retour
Un objet (Object
) correspondant au texte envoyé.
Exceptions
Lève une exception SyntaxError
si la chaine de caractère à analyser ne contient pas du JSON valide.
Exemples
Utiliser JSON.parse()
try { JSON.parse('{}'); // {} JSON.parse('true'); // true JSON.parse('"toto"'); // "toto" JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] JSON.parse('null'); // null } catch (e) { console.error("Parsing error:", e); }
Utiliser le paramètre reviver
Si un reviver est spécifié, la valeur obtenue par l'analyse est transformée avant d'être renvoyée. Plus précisément, la valeur calculée, et toutes les propriétés (commençant avec les propriétés les plus imbriquées), sont passées individuellement au reviver, qui est appelé avec : l'objet contenant la propriété en cours de traitement, le nom de la propriété en chaine de caractères et la valeur de la propriété. Si la fonction reviver retourne undefined
(ou ne retourne aucune valeur, par exemple si l'exécution s'arrête à la fin de la fonction), la propriété est supprimée de l'objet. Autrement la propriété est redéfinie avec la valeur retournée.
Si le reviver ne transforme que certaines valeurs et pas d'autres, assurez-vous que les valeurs inchangées soient renvoyées telles quelles. En effet, si elles ne sont pas renvoyées, elles seront supprimés sur l'objet obtenu !
JSON.parse('{"p": 5}', (key, value) => if (typeof value === 'number') { return value * 2; // renvoie value * 2 pour les nombres } return value; // pour le reste, la valeur est inchangée ); // { p: 10 } JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); // on affiche le nom de la propriété dans la console return value; // et on renvoie la valeur inchangée. }); // 1 // 2 // 4 // 6 // 5 // 3 // ""
JSON.parse()
n'accepte pas les virgules en fin de tableau
// les deux instructions qui suivent lèveront une SyntaxError JSON.parse('[1, 2, 3, 4, ]'); JSON.parse('{ "toto" : 1, }');
Spécifications
Spécification | État | Commentaires |
---|---|---|
ECMAScript 5.1 (ECMA-262) La définition de 'JSON.parse' dans cette spécification. |
Standard | Définition initiale. Implementée avec JavaScript 1.7. |
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'JSON.parse' dans cette spécification. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) La définition de 'JSON.parse' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | (Oui) | 3.5 (1.9.1) | 8.0 | 10.5 | 4.0 |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | (Oui) | (Oui) | 1.0 (1.0) | (Oui) | (Oui) | (Oui) |
Notes spécifiques à Gecko
À partir de Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26), une chaîne de JSON mal formée renverra un message d'erreur détaillé qui contient la ligne et la colonne à l'origine de l'erreur. Cela peut s'avérer utile lorsqu'on manipule de grandes quantités de données JSON.
JSON.parse('[1, 2, 3,]'); // SyntaxError : JSON.parse : caractère inattendu // à la ligne 1 et à la colonne 10 de la donnée JSON