diff options
Diffstat (limited to 'files/fr/web/javascript/reference/objets_globaux/json/index.html')
-rw-r--r-- | files/fr/web/javascript/reference/objets_globaux/json/index.html | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/files/fr/web/javascript/reference/objets_globaux/json/index.html b/files/fr/web/javascript/reference/objets_globaux/json/index.html new file mode 100644 index 0000000000..ecc67a2d86 --- /dev/null +++ b/files/fr/web/javascript/reference/objets_globaux/json/index.html @@ -0,0 +1,153 @@ +--- +title: JSON +slug: Web/JavaScript/Reference/Objets_globaux/JSON +tags: + - JSON + - JavaScript + - Object + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/JSON +--- +<div>{{JSRef}}</div> + +<p>L’objet <strong><code>JSON</code></strong> contient des méthodes pour interpréter du <a class="external" href="https://json.org/">JSON</a> (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.</p> + +<h2 id="Différences_entres_JavaScript_et_JSON">Différences entres JavaScript et JSON</h2> + +<p>JSON est une syntaxe pour sérialiser des objets, tableaux, nombres, chaînes de caractères, booléens et valeurs <em>null</em>. 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.</p> + +<ul> + <li>Pour les objets et les tableaux + <ul> + <li>Les noms de propriété doivent être des chaînes de caractères délimitées par des guillements doubles ; les <em>trailing commas</em> sont interdits</li> + </ul> + </li> + <li>Pour les nombres + <ul> + <li>Les zéros non significatifs sont interdits ; un point décimal doit être suivi d’au moins un chiffre (plus exactement : <code>JSON.stringify()</code> ignorera les zéros mais <code>JSON.parse()</code> déclenchera une exception <code>SyntaxError</code>).</li> + </ul> + </li> + <li>Pour le texte : <strong>tout texte JSON est une expression JavaScript</strong> (pour les moteurs qui implémentent <a href="https://github.com/tc39/proposal-json-superset">cette proposition</a>). + <ul> + <li>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 (<a href="https://unicode-table.com/en/2028/">U+2028</a>) et le séparateur de paragraphe (<a href="https://unicode-table.com/en/2029/">U+2029</a>) sont autorisés en JSON mais pas en JavaScript dans les littéraux de chaînes de caractères.</li> + </ul> + </li> +</ul> + +<p>Dans l'exemple suivant, on utilise {{jsxref("JSON.parse()")}} afin d'analyser la chaîne JSON et <code>eval</code> afin d'exécuter le code correspondant :</p> + +<pre class="brush: js">var code = '"\u2028\u2029"'; +JSON.parse(code); // vaut "\u2028\u2029" pour tous les moteurs +eval(code); // provoque une SyntaxError pour les anciens moteurs</pre> + +<h2 id="Syntaxe_complète">Syntaxe complète</h2> + +<pre class="syntaxbox"><var>JSON</var> = <strong>null</strong> + <em>ou</em> <strong>true</strong> <em>ou</em> <strong>false</strong> + <em>ou</em> <var>NombreJSON</var> + <em>ou</em> <var>ChaîneJSON</var> + <em>ou</em> <var>ObjetJSON</var> + <em>ou</em> <var>TableauJSON</var> + +<var>NombreJSON</var> = <strong>-</strong> <var>NombrePositif</var> + <em>ou</em> <var>NombrePositif</var> +<var>NombrePositif</var> = NombreDécimal + <em>ou</em> <var>NombreDécimal</var> <strong>.</strong> <var>Chiffres</var> + <em>ou</em> <var>NombreDécimal</var> <strong>.</strong> <var>Chiffres</var> <var>PartiExposant</var> + <em>ou</em> <var>NombreDécimal</var> <var>PartiExposant</var> +<var>NombreDécimal</var> = <strong>0</strong> + <em>ou</em> <var>UnÀNeuf</var> <var>Chiffres</var> +<var>PartiExposant</var> = <strong>e</strong> <var>Exposant</var> + <em>ou</em> <strong>E</strong> <var>Exposant</var> +<var>Exposant</var> = <var>Chiffres</var> + <em>ou</em> <strong>+</strong> <var>Chiffres</var> + <em>ou</em> <strong>-</strong> <var>Chiffres</var> +<var>Chiffres</var> = <var>Chiffre</var> + <em>ou</em> <var>Chiffres</var> <var>Chiffre</var> +<var>Chiffre</var> = <strong>0</strong> à <strong>9</strong> +<var>UnÀNeuf</var> = <strong>1</strong> à <strong>9</strong> + +<var>ChaîneJSON</var> = <strong>""</strong> + <em>ou</em> <strong>"</strong> <var>ChaîneCaractères</var> <strong>"</strong> +<var>ChaîneCaractères</var> = <var>ChaîneCaractère</var> + <em>ou</em> <var>ChaîneCaractères</var> <var>ChaîneCaractère</var> +<var>ChaîneCaractère</var> = un caractère + <em>sauf</em> <strong>"</strong> <em>ou</em> <strong>\</strong> <em>ou</em> U+0000 à U+001F + <em>ou</em> <var>SéquenceÉchappement</var> +<var>SéquenceÉchappement</var> = <strong>\" </strong><em>ou</em> <strong>\/ </strong><em>ou</em> <strong>\\ </strong><em>ou</em> <strong>\b </strong><em>ou</em> <strong>\f </strong><em>ou</em> <strong>\n </strong><em>ou</em> <strong>\r </strong><em>ou</em> <strong>\t</strong> + <em>ou</em> <strong>\u</strong> <var>ChifreHexadécimal</var> <var>ChifreHexadécimal</var> <var>ChifreHexadécimal</var> <var>ChifreHexadécimal</var> +<var>ChifreHexadécimal</var> = <strong>0</strong> à <strong>9</strong> + <em>ou</em> <strong>A</strong> à <strong>F</strong> + <em>ou</em> <strong>a</strong> à <strong>f</strong> + +<var>ObjetJSON</var> = <strong>{</strong> <strong>}</strong> + <em>ou</em> <strong>{</strong> <var>Membres</var> <strong>}</strong> +<var>Membres</var> = <var>ChaîneJSON</var> <strong>:</strong> <var>JSON</var> + <em>ou</em> <var>Membres</var> <strong>,</strong> <var>ChaîneJSON</var> <strong>:</strong> <var>JSON</var> + +<var>TableauJSON</var> = <strong>[</strong> <strong>]</strong> + <em>ou</em> <strong>[</strong> <var>ÉlémentsTableau</var> <strong>]</strong> +<var>ÉlémentsTableau</var> = <var>JSON</var> + <em>ou</em> <var>ÉlémentsTableau</var> <strong>,</strong> <var>JSON</var></pre> + +<p>Des espaces blancs insignifiants peuvent être présents n’importe où sauf dans un <code><var>JSONNumber</var></code> (les nombres ne doivent pas contenir d’espaces blancs) ou dans un <code><var>JSONString</var></code> (where it is interpreted as the corresponding character in the string, or would cause an error). Les caractères tabulation (<a href="https://unicode-table.com/en/0009/">U+0009</a>), retour chariot (<a href="https://unicode-table.com/en/000D/">U+000D</a>), saut de ligne (<a href="https://unicode-table.com/en/000A/">U+000A</a>), and espace (<a href="https://unicode-table.com/en/0020/">U+0020</a>) sont les seuls caractères blancs valides.</p> + +<h2 id="Méthodes">Méthodes</h2> + +<dl> + <dt>{{jsxref("JSON.parse()", "JSON.parse(<var>texte</var>[, <var>revivificateur</var>])")}}</dt> + <dd>Analysez le <code>texte</code> 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 "<code>revivificateur</code>" permet d'interpréter ce que le <code>remplacement</code> a utilisé pour remplacer d'autres types de données.</dd> + <dt>{{jsxref("JSON.stringify()", "JSON.stringify(<var>valeur</var>[, remplacement[, expace]])")}}</dt> + <dd>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 <code>remplacement</code> permet de spécifier un autre comportement.</dd> +</dl> + +<h2 id="Spécifications">Spécifications</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Spécification</th> + <th scope="col">État</th> + <th scope="col">Commentaires</th> + </tr> + <tr> + <td>{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}</td> + <td>{{Spec2('ES5.1')}}</td> + <td>Définition initiale.</td> + </tr> + <tr> + <td>{{SpecName('ES6', '#sec-json-object', 'JSON')}}</td> + <td>{{Spec2('ES6')}}</td> + <td></td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-json-object', 'JSON')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div> +<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et à nous envoyer une <em>pull request</em>.</div> + +<p>{{Compat("javascript.builtins.JSON")}}</p> +</div> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{jsxref("Date.prototype.toJSON()")}}</li> + <li>Quelques outils permettant de manipuler des données en JSON + <ul> + <li><a href="http://jsoncompare.org/">JSON Compare</a> qui permet de comparer deux JSON</li> + <li><a href="http://jsonbeautifier.org/">JSON Beautifier</a> qui permet de visualiser et d'éditer un fichier JSON</li> + <li><a href="https://jsonparser.org/">JSON Parser</a> qui permet de formatter une chaîne JSON</li> + <li><a href="https://extendsclass.com/json-validator.html">JSON Formatter</a> qui permet de formatter et échapper une chaîne JSON </li> + <li><a href="https://tools.learningcontainer.com/json-validator/">JSON Validator</a> qui permet de valider une chaîne JSON</li> + </ul> + </li> +</ul> |