Есть ли практическая причина использовать строки в кавычках для ключей JSON?


по данным Крокфорд это json.org, в JSON-формате объект состоит из члены, который составлен пар.

каждая пара состоит из строка и стоимостью С строка определяется как:

строка-это последовательность из нуля или более Символов Unicode, заключенная в двойные кавычки, используя обратную косую черту экранирует. Один символ представлен в виде одиночный символьная строка. Строки очень очень похоже на строку C или Java.

имеет ли смысл беспокоиться о вашем JSON в двойных кавычках?

Корректный Пример:

{
  "keyName" : 34
}

в отличие от поврежденных:

{
   keyName : 34
}
3 74

3 ответа:

реальная причина того, почему ключи JSON должны быть в кавычках, опирается на семантику идентификаторов ECMAScript 3.

зарезервированные слова не может использоваться как имена свойств в объектных литералах без кавычек, например:

({function: 0}) // SyntaxError
({if: 0}) // SyntaxError
({true: 0}) // SyntaxError
// etc...

В то время как при использовании кавычек имена свойств действительны:

({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok

собственный Крокфорд объясняет это в этот разговор, они хотели сохранить стандарт JSON простым, и они не хотелось бы иметь все эти семантические ограничения на это:

....

именно тогда мы обнаружили проблема с некотируемым именем. Оказывается Сценарий ECMA 3 имеет зарезервированный удар слово политика. Зарезервированные слова должны быть цитируется в ключевой позиции, которая является действительно неприятность. Когда я пришел в себя чтобы сформулировать это в стандарт, я не хочу, чтобы все зарезервированные слова в стандарте, потому что это будет выглядеть действительно глупый.

в то время я пытался убедить человек: да, вы можете написать приложения на JavaScript, это идешь на работу и это хорошо язык. Тогда я не хотел говорить., в то же время: и посмотрите на это действительно глупая вещь они сделали! Так Что Я решил, вместо этого, давайте просто процитируем ключи.
Таким образом, мы не должны говорить кто-нибудь о том, как это ударить.

вот почему, по сей день, ключи указаны в формат JSON.

...

стандарт ECMAScript 5th Edition исправляет это, теперь в реализации ES5 даже зарезервированные слова могут использоваться без кавычек, как в объектных литералах, так и в доступе к членам (obj.function Ok в ES5).

просто для записи, этот стандарт реализуется в эти дни поставщиками программного обеспечения, вы можете увидеть, какие браузеры включают эту функцию на этом таблица совместимости (см. зарезервированные слова как имена свойств)

Да, это недопустимый JSON и будет отклонен в противном случае во многих случаях, например, jQuery 1.4+ имеет проверку, которая делает некотируемый JSON молча сбой. Почему не быть совместимыми?

давайте возьмем другой пример:

{ myKey: "value" }
{ my-Key: "value" }
{ my-Key[]: "value" }

...все это б быть действительным с кавычками, почему бы не быть последовательным и использовать их во всех случаях, устраняя возможность проблемы?

еще один распространенный пример в мире веб-разработчика: есть тысячи примеров недопустимого HTML, который отображается в большинстве браузеров...это делает его менее болезненным для отладки или обслуживания? Совсем нет, совсем наоборот.

также @Матвей делает лучший момент из всех в комментариях ниже, это уже сбой, некотируемые ключи выдадут синтаксическую ошибку с JSON.parse() во всех основных браузерах (и любых других, которые реализуют его правильно),вы можете проверить это здесь.

YAML, который на самом деле является надмножеством JSON, поддерживает то, что вы хотите сделать. Хотя это суперсет, он позволяет вам держать его так просто, как вы хотите.

YAML-это глоток свежего воздуха, и это может стоить вашего времени, чтобы взглянуть на него. Лучшее место для начала здесь:http://en.wikipedia.org/wiki/YAML

есть libs для каждого языка под солнцем, в том числе JS, например https://github.com/nodeca/js-yaml