@ AndreasN является верным : спецификация JSON диктует использование кавычек, чтобы оно действительно было JSON. Если вы не используете кавычки, это может быть действительный литерал объекта в Javascript, но это не JSON. Другие сервисы, кроме Javascript на стороне браузера, используют JSON (например, веб-сервисы, использующие php, Java и т. Д.), И если вы создаете строку, в которой отсутствуют кавычки, нет гарантии, что она будет проанализирована правильно - хотя я подозреваю, что большинство реализаций будет достаточно крепкий, чтобы сделать это.
Кстати, в Javascript опасно напрямую использовать eval () для строк JSON из источников, которые вы не можете предотвратить злонамеренными атаками. Снова, посмотрите JSON-сайт , который дает больше объяснений, а также очень короткий файл javascript, который безопасно анализирует строки JSON в объектах Javascript.
edit: Я полагаю, технически ваш оригинальный вопрос не о JSON, а о синтаксисе Javascript для объектных литералов . Разница заключается в том, что объекты, создаваемые из строки JSON, будут исключать множество других возможных литералов объектов, например ::
.
var a = {cat: "meow", dog: "woof"};
var aname = {cat: "Garfield", dog: "Odie"};
var b = {
counter: 0,
pow: function(x) { return x+1; },
zap: function(y) { return (counter += y); }
};
var c = {
all: [a,aname],
animals: a,
names: aname,
};
Литералы объектов "a" и "aname" могут быть выражены в JSON (путем добавления кавычек к именам свойств). Но объектные литералы "b" и "c" не могут. Объектный литерал "b" содержит функции (недопустимо в JSON). Объектный литерал "c" выше содержит ссылки на другие переменные способом, который не представлен в JSON, потому что некоторые ссылки являются общими. Если вы внесете изменение в c.names
, оно также изменит c.all[1]
, так как они имеют ссылку на одну и ту же переменную. JSON может выражать только объекты, имеющие древовидную структуру (например, каждый подэлемент всего объекта является независимым).