--- title: JSON slug: Web/JavaScript/Reference/Global_Objects/JSON tags: - JSON - JavaScript - Object - Reference - polyfill translation_of: Web/JavaScript/Reference/Global_Objects/JSON original_slug: Web/JavaScript/Reference/Objets_globaux/JSON --- {{JSRef}} L’objet **`JSON`** contient des méthodes pour interpréter du [JSON](https://json.org/) (JavaScript Object Notation) (voir également la page du glossaire {{glossary("JSON")}}) et convertir des valeurs en JSON. Il ne peut être appelé ou construit, et, en dehors de ses deux méthodes, n’a pas de fonctionnalité propre. ## Différences entres JavaScript et JSON JSON est une syntaxe pour sérialiser des objets, tableaux, nombres, chaînes de caractères, booléens et valeurs _null_. Elle est basée sur la syntaxe de JavaScript mais en est distincte : du code JavaScript n’est pas nécessairement du JSON, et du JSON n’est pas nécessairement du JavaScript. - Pour les objets et les tableaux - Les noms de propriété doivent être des chaînes de caractères délimitées par des guillements doubles ; les _trailing commas_ sont interdits - Pour les nombres - Les zéros non significatifs sont interdits ; un point décimal doit être suivi d’au moins un chiffre (plus exactement : `JSON.stringify()` ignorera les zéros mais `JSON.parse()` déclenchera une exception `SyntaxError`). - Pour le texte : **tout texte JSON est une expression JavaScript** (pour les moteurs qui implémentent [cette proposition](https://github.com/tc39/proposal-json-superset)). - Pour les autres moteurs, seul un jeu limité de caractères peut être échappé ; certains caractères de contrôle sont interdits ; le séparateur de ligne Unicode ([U+2028](https://unicode-table.com/en/2028/)) et le séparateur de paragraphe ([U+2029](https://unicode-table.com/en/2029/)) sont autorisés en JSON mais pas en JavaScript dans les littéraux de chaînes de caractères. Dans l'exemple suivant, on utilise {{jsxref("JSON.parse()")}} afin d'analyser la chaîne JSON et `eval` afin d'exécuter le code correspondant : ```js var code = '"\u2028\u2029"'; JSON.parse(code); // vaut "\u2028\u2029" pour tous les moteurs eval(code); // provoque une SyntaxError pour les anciens moteurs ``` ## Syntaxe complète JSON = null ou true ou false ou NombreJSON ou ChaîneJSON ou ObjetJSON ou TableauJSON NombreJSON = - NombrePositif ou NombrePositif NombrePositif = NombreDécimal ou NombreDécimal . Chiffres ou NombreDécimal . Chiffres PartiExposant ou NombreDécimal PartiExposant NombreDécimal = 0 ou UnÀNeuf Chiffres PartiExposant = e Exposant ou E Exposant Exposant = Chiffres ou + Chiffres ou - Chiffres Chiffres = Chiffre ou Chiffres Chiffre Chiffre = 0 à 9 UnÀNeuf = 1 à 9 ChaîneJSON = "" ou " ChaîneCaractères " ChaîneCaractères = ChaîneCaractère ou ChaîneCaractères ChaîneCaractère ChaîneCaractère = un caractère sauf " ou \ ou U+0000 à U+001F ou SéquenceÉchappement SéquenceÉchappement = \" ou \/ ou \\ ou \b ou \f ou \n ou \r ou \t ou \u ChifreHexadécimal ChifreHexadécimal ChifreHexadécimal ChifreHexadécimal ChifreHexadécimal = 0 à 9 ou A à F ou a à f ObjetJSON = { } ou { Membres } Membres = ChaîneJSON : JSON ou Membres , ChaîneJSON : JSON TableauJSON = [ ] ou [ ÉlémentsTableau ] ÉlémentsTableau = JSON ou ÉlémentsTableau , JSON Des espaces blancs insignifiants peuvent être présents n’importe où sauf dans un `JSONNumber` (les nombres ne doivent pas contenir d’espaces blancs) ou dans un `JSONString` (where it is interpreted as the corresponding character in the string, or would cause an error). Les caractères tabulation ([U+0009](https://unicode-table.com/en/0009/)), retour chariot ([U+000D](https://unicode-table.com/en/000D/)), saut de ligne ([U+000A](https://unicode-table.com/en/000A/)), and espace ([U+0020](https://unicode-table.com/en/0020/)) sont les seuls caractères blancs valides. ## Méthodes - {{jsxref("JSON.parse()", "JSON.parse(texte[, revivificateur])")}} - : Analysez le `texte` de la chaîne comme JSON, transformez éventuellement la valeur produite et ses propriétés, et renvoyez la valeur. Toute violation de la syntaxe JSON, y compris celles concernant les différences entre JavaScript et JSON, entraîne l'envoi d'un {{jsxref("SyntaxError")}}. L'option "`revivificateur`" permet d'interpréter ce que le `remplacement` a utilisé pour remplacer d'autres types de données. - {{jsxref("JSON.stringify()", "JSON.stringify(valeur[, remplacement[, expace]])")}} - : Retourne une chaîne JSON correspondant à la valeur spécifiée, en incluant éventuellement seulement certaines propriétés ou en remplaçant les valeurs des propriétés d'une manière définie par l'utilisateur. Par défaut, toutes les instances de {{jsxref("undefined")}} sont remplacées par {{jsxref("null")}}, et les autres types de données natives non prises en charge sont censurés. L'option de `remplacement` permet de spécifier un autre comportement. ## Spécifications | Spécification | État | Commentaires | | -------------------------------------------------------------------- | ---------------------------- | -------------------- | | {{SpecName('ES5.1', '#sec-15.12', 'JSON')}} | {{Spec2('ES5.1')}} | Définition initiale. | | {{SpecName('ES6', '#sec-json-object', 'JSON')}} | {{Spec2('ES6')}} | | | {{SpecName('ESDraft', '#sec-json-object', 'JSON')}} | {{Spec2('ESDraft')}} | | ## Compatibilité des navigateurs {{Compat("javascript.builtins.JSON")}} ## Voir aussi - {{jsxref("Date.prototype.toJSON()")}} - Quelques outils permettant de manipuler des données en JSON - [JSON Compare](http://jsoncompare.org/) qui permet de comparer deux JSON - [JSON Beautifier](http://jsonbeautifier.org/) qui permet de visualiser et d'éditer un fichier JSON - [JSON Parser](https://jsonparser.org/) qui permet de formatter une chaîne JSON - [JSON Formatter](https://extendsclass.com/json-validator.html) qui permet de formatter et échapper une chaîne JSON - [JSON Validator](https://tools.learningcontainer.com/json-validator/) qui permet de valider une chaîne JSON