Должны ли ключи JSON быть заключены в кавычки? - PullRequest
210 голосов
/ 04 июня 2009

Пример: Действителен ли следующий код для JSON Spec ?

{
    precision: "zip"
}

Или я всегда должен использовать следующий синтаксис? (И если да, то почему?)

{
    "precision": "zip"
}

Я действительно не нашел что-то об этом в спецификациях JSON. Хотя они используют кавычки вокруг своих ключей в своих примерах.

Ответы [ 5 ]

130 голосов
/ 04 июня 2009

Вы правильно используете строки в качестве ключа. Вот выдержка из RFC 4627 - Приложение / json Media Type для JavaScript Object Notation (JSON)

2,2. Объекты

Структура объекта представлена ​​в виде пары фигурных скобок окружающий ноль или более пар имя / значение (или членов). Имя это строка . После каждого имени стоит двоеточие, отделяя имя от стоимости. Одна запятая отделяет значение от следующего название. Имена внутри объекта ДОЛЖНЫ быть уникальными.

object = begin-object [ member *( value-separator member ) ] end-object

member = string name-separator value

[...]

2.5. Строки

Представление строк аналогично соглашениям, используемым в C семейство языков программирования. Строка начинается и заканчивается кавычки. [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

Читайте весь RFC здесь .

128 голосов
/ 04 июня 2009

Да, вам нужны кавычки. Это сделано для того, чтобы упростить его и избежать использования другого метода escape для зарезервированных ключевых слов javascript, например {for:"foo"}.

12 голосов
/ 04 июня 2009

С 2.2. Объекты

Структура объекта представляется в виде пары фигурных скобок, окружающих ноль или более пар имя / значение (или членов). Имя - это строка.

и от 2,5. Строки

Строка начинается и заканчивается кавычками.

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

6 голосов
/ 04 июня 2009

Да, кавычки обязательны. http://json.org/ говорит:

string
    ""
    " chars "
0 голосов
/ 31 января 2016

Поскольку вы можете поставить пунктирную нотацию parent.child и вам не нужно указывать parent ["child"], который также является допустимым и полезным, я бы сказал, что оба способа технически приемлемы. Все парсеры должны работать в обоих направлениях. Если вашему парсеру не нужны кавычки на ключах, то, вероятно, лучше не ставить их (экономит место). Имеет смысл называть их строками, потому что это то, чем они являются, и, поскольку квадратные скобки дают вам возможность использовать значения для ключей, по сути, имеет смысл не делать этого. В Json вы можете положить ...

>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};

>obj
Object {someKey: "someValue"}

просто отлично без проблем, если вам нужно значение для ключа и ни один из указанных в кавычках не будет работать, так что если это не так, вы не можете, так что вы не будете так " ключи». Даже если правильно сказать, что они технически струны. Логика и использование утверждают иначе. Он также официально не выводит Object {"someKey": "someValue"} для объекта obj в нашем примере из консоли любого браузера.

...