JSON

L’objet JSON contient des méthodes pour interpréter du JSON (JavaScript Object Notation) (voir également la page du glossaire 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).
    • 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) et le séparateur de paragraphe (U+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 JSON.parse() afin d'analyser la chaîne JSON et eval afin d'exécuter le code correspondant :

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), retour chariot (U+000D), saut de ligne (U+000A), and espace (U+0020) sont les seuls caractères blancs valides.

Méthodes

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 SyntaxError. L'option "revivificateur" permet d'interpréter ce que le remplacement a utilisé pour remplacer d'autres types de données.
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 undefined sont remplacées par 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
ECMAScript 5.1 (ECMA-262)
La définition de 'JSON' dans cette spécification.
Standard Définition initiale.
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'JSON' dans cette spécification.
Standard
ECMAScript (ECMA-262)
La définition de 'JSON' dans cette spécification.
Standard évolutif

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
JSONChrome Support complet 3Edge Support complet 12Firefox Support complet 3.5IE Support complet 8Opera Support complet 10.5Safari Support complet 4WebView Android Support complet ≤37Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11Safari iOS Support complet 4Samsung Internet Android Support complet 1.0nodejs Support complet 0.1.100
JavaScript is a superset of JSONChrome Support complet 66Edge Support complet 79Firefox Support complet 62IE Aucun support NonOpera Support complet 53Safari Support complet 12WebView Android Support complet 66Chrome Android Support complet 66Firefox Android Support complet 62Opera Android Support complet 47Safari iOS Support complet 12Samsung Internet Android Support complet 9.0nodejs Support complet 10.0.0
parseChrome Support complet 3Edge Support complet 12Firefox Support complet 3.5IE Support complet 8Opera Support complet 10.5Safari Support complet 4WebView Android Support complet ≤37Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11Safari iOS Support complet 4Samsung Internet Android Support complet 1.0nodejs Support complet 0.1.100
stringifyChrome Support complet 3Edge Support complet 12Firefox Support complet 3.5IE Support complet 8Opera Support complet 10.5Safari Support complet 4WebView Android Support complet ≤37Chrome Android Support complet 18Firefox Android Support complet 4Opera Android Support complet 11Safari iOS Support complet 4Samsung Internet Android Support complet 1.0nodejs Support complet 0.1.100

Légende

Support complet  
Support complet
Aucun support  
Aucun support

Voir aussi