Ответ 1
Сначала вы должны знать, что такое JSON:
- Это языковой агностический формат обмена данными.
Синтаксис JSON был вдохновлен нотой JavaScript Object Literal, но между ними существуют различия.
Например, в JSON все ключи должны быть указаны, а в объектных литералах это необязательно:
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
Кавычки обязательны для JSON, потому что в JavaScript (точнее, в ECMAScript 3rd Edition) использование зарезервированных слов в качестве имен свойств запрещается, например:
var o = { if: "foo" }; // SyntaxError in ES3
Хотя использование строкового литерала в качестве имени свойства (цитирование имени свойства) не создает проблем:
var o = { "if": "foo" };
Итак, для "совместимости" (и, проще говоря, возможно?) цитаты обязательны.
Типы данных в JSON также ограничены следующими значениями:
-
string
-
number
-
object
-
array
- Литерала:
-
true
-
false
-
null
-
Изменяется грамматика Strings
. Они должны быть разделены двойными кавычками, в то время как в JavaScript вы можете использовать одиночные или двойные кавычки взаимозаменяемо.
// Invalid JSON:
{ "foo": 'bar' }
Также принята принятая грамматика JSON Numbers
, в JavaScript вы можете использовать шестнадцатеричные литералы, например 0xFF
или (печально известные) восьмизначные литералы, например. 010
. В JSON вы можете использовать только десятичные литералы.
// Invalid JSON:
{ "foo": 0xFF }
Есть некоторая ошибка в реализации (Firefox 3.5+, IE8 +, json2.js), где ошибочно разрешены восьмеричные литералы, например. JSON.parse('01')
должен создать SyntaxError
.