Подтвердить что ты не робот

Требуется ли JSON.parse() двойное цитирование?

Я использую Firefox 3.5b4.

Это предупреждает об объекте объекта, объекте объекта:

var jsonString = '[{"foo": "one", "bar": 1}, {"foo": "two", "bar": 2}]';
var jsonObjects = JSON.parse(jsonString);
alert(jsonObjects);

Это предупреждает пустую строку, то есть jsonObjects имеет значение null.

var jsonString = "[{'foo': '1', 'bar': 2}, {'foo': '3', 'bar': 4}]";
var jsonObjects = JSON.parse(jsonString);
alert(jsonObjects);

Аналогично для имен некотируемых свойств, то есть {foo: '1', bar: 2}.

Что происходит? Мне что-то не хватает, или есть правило о двойном и одинарном цитировании с JSON.parse? Все три версии работают нормально с eval.

4b9b3361

Ответ 1

Стандарт JSON предусматривает двойные кавычки.

Помните, что JSON - это не просто "написать объект JS". Это очень строгий синтаксис, который также можно прочитать как объект JS. Не каждый JS-действительный синтаксис действителен JSON. Фактически, ваш пример не является действительно действительным JSON, так как он представляет собой массив объектов, в то время как стандарт указывает, что верхняя конструкция ДОЛЖНА быть объектом.

Конечно, большинство парсеров JSON более гибкие, что позволяет использовать нестандартные опции (например, одинарные кавычки); но не полагайтесь на это.

Ответ 2

Чтобы добавить к тому, что сказал Хавьер, JSON ограничивает формат главным образом соображениями безопасности (так что функции не могут быть вызваны и т.д.). Если вас не беспокоит безопасность, используйте функцию javascript "eval()", чтобы преобразовать строку в объект.