Tout d'abord, vous devez savoir ce qu'est JSON :
- Il est agnostique en matière de langues format d'échange de données.
La syntaxe de JSON est inspirée de la notation JavaScript Object Literal, mais il existe des différences entre les deux.
Par exemple, dans JSON, tous les clés doit être cité, alors que ce n'est pas nécessaire pour les littéraux d'objet :
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
Les guillemets sont obligatoires dans JSON parce qu'en JavaScript (plus exactement dans la 3e édition d'ECMAScript), l'utilisation des guillemets est interdite. mots réservés comme noms de propriétés n'est pas autorisée, par exemple :
var o = { if: "foo" }; // SyntaxError in ES3
En revanche, l'utilisation d'une chaîne littérale comme nom de propriété (en citant le nom de la propriété) ne pose aucun problème :
var o = { "if": "foo" };
Donc pour "compatibilité" (et une évaluation facile peut-être ?) les guillemets sont obligatoires.
Les types de données dans JSON sont également limités aux valeurs suivantes :
string
number
object
array
- Au sens littéral du terme :
La grammaire de Strings
changements. Ils doivent être délimité par guillemets doubles tandis qu'en JavaScript, vous pouvez utiliser indifféremment des guillemets simples ou doubles.
// Invalid JSON:
{ "foo": 'bar' }
La grammaire JSON acceptée de Numbers
change également, en JavaScript vous pouvez utiliser des littéraux hexadécimaux, par exemple 0xFF
ou (le tristement célèbre) les littéraux octaux, par ex. 010
. Dans JSON, vous ne pouvez utiliser que des littéraux décimaux.
// Invalid JSON:
{ "foo": 0xFF }
Dans certaines implémentations boguées (Firefox 3.5+, IE8+, json2.js), les littéraux octaux sont autorisés à tort. <code>JSON.parse('01')</code> devrait produire un <code>SyntaxError</code> .