Пример: допустим ли следующий код для спецификации JSON ?
{
precision: "zip"
}
Или я всегда должен использовать следующий синтаксис? (А если так, то почему?)
{
"precision": "zip"
}
Я действительно не нашел что-то об этом в спецификациях JSON. Хотя они используют кавычки вокруг своих ключей в своих примерах.
json
specifications
standards-compliance
json5
christianvuerings
источник
источник
Вы правильно используете строки в качестве ключа. Вот выдержка из RFC 4627 - Тип приложения / json Media для нотации объектов JavaScript (JSON)
Прочитайте весь RFC здесь .
источник
A string begins and ends with quotation marks.
.С 2.2. Объекты
и с 2.5. Струны
Поэтому я бы сказал, что в соответствии со стандартом: да, вы всегда должны цитировать ключ (хотя некоторые парсеры могут быть более прощающими)
источник
Да, цитаты обязательны. http://json.org/ говорит:
источник
Да, они делают. Но если вам нужно иначе, оформите JSON5 .
JSON5 - это расширенный набор JSON, который допускает синтаксис ES5, включая:
Реализация ссылок JSON5 (
json5
пакет npm ) предоставляетJSON5
объектparse
иstringify
методы с теми же аргументами и семантикой, что и у встроенногоJSON
объекта.источник
Поскольку вы можете поставить пунктирную нотацию parent.child и вам не нужно указывать parent ["child"], который также является допустимым и полезным, я бы сказал, что оба способа технически приемлемы. Все парсеры должны работать в обоих направлениях. Если вашему парсеру не нужны кавычки на ключах, то, вероятно, лучше не ставить их (экономит место). Имеет смысл называть их строками, потому что это то, чем они являются, и, поскольку квадратные скобки дают вам возможность использовать значения для ключей, по сути, имеет смысл не делать этого. В Json вы можете положить ...
просто без проблем, если вам нужно значение для ключа, и ни одна из кавычек не будет работать, поэтому, если это не так, вы не сможете, так что вы не будете так «вам не нужны кавычки для ключей». Даже если правильно сказать, что они технически струны. Логика и использование утверждают иначе. Он также официально не выводит Object {"someKey": "someValue"} для объекта obj в нашем примере, запускаемого из консоли любого браузера.
источник
obj
в консоли, браузер отображает некоторое удобочитаемое представление объекта. Он может отображать его как литерал объекта (как это было в вашем примере) или использовать другое представление, даже интерактивное. Литералы объекта JavaScript не требуют кавычек вокруг имени ключа, если ключ является допустимым идентификатором, а не зарезервированным словом. Однако JSON всегда требует кавычек вокруг имен ключей.obj
попробуйте вместо ввода в консолиJSON.stringify(obj)
. Теперь вы увидите действительное JSON-представление объекта, дополненное кавычкой с именем ключа. И наоборот, чтобы увидеть, является ли строка допустимым JSON, попробуйтеJSON.parse(string)
. Если ключи не указаны, это приведет к исключению. Например,JSON.parse('{"a":"b"}')
удастся, но неJSON.parse('{a:"b"}')
получится.var obj = {[keyName]:"someValue"};
очень интересно! Я не знал, что вы могли бы сделать это в литерале объекта JavaScript. Немного проверки показывает, что это что-то новое в ES6 - вы не могли сделать это в ES5.