в JSON, Почему каждое имя заключается в кавычки?

Спецификация JSON говорит, что JSON является объектом или массивом. В случае объекта,

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

И позже, спецификация говорит, что строка окружается в кавычках.

Почему?

Таким образом,

{"Property1":"Value1","Property2":18}

и нет

{Property1:"Value1",Property2:18}

Вопрос 1: почему бы не позволить имени в парах имя/значение быть закрывшими кавычки идентификаторами?


Вопрос 2: существует ли семантическое различие между этими двумя представлениями выше при оценке в JavaScript?

90
задан Cheeso 14 January 2010 в 22:18
поделиться

5 ответов

Вопрос 1: почему бы не разрешить название в парах имени / значения, чтобы быть необоснованными идентификаторами?

Философия дизайна JSON - «Держать его простым»

«Имена цитаты с «» » намного проще, чем « Вы можете цитировать имена с » или , но вам не нужно, если они Содержит определенные символы (или комбинации символов, которые будут иметь его ключевое слово), а « или , возможно, необходимо для указания в зависимости от того, какой разделитель вы выбрали« .

Вопрос 2: Существует ли смысловая разница между двумя представлениями выше, при оценке в JavaScript?

нет. В JavaScript они идентичны.

56
ответ дан 24 November 2019 в 07:02
поделиться

в объектах JavaScript можно использовать как хеш / Hashtable с ключами.

Однако, если ваш ключ имеет символы, которые JavaScript не смог не токеризировать как имя, он не удается при попытке его доступа, как свойство на объекте, а не клавише.

var test  = {};
test["key"] = 1;
test["#my-div"] = "<div> stuff </div>";

// test = { "key": 1, "#my-div": "<div> stuff </div>" };

console.log(test.key);           // should be 1
console.log(test["key"]);        // should be 1
console.log(test["#my-div"]);    // should be "<div> stuff </div>";
console.log(test.#my-div);       // would not work.

Идентификаторы иногда могут иметь символы, которые не могут быть оценены как токен / идентификатор в JavaScript, что лучше всего ставить все идентификаторы в строки для согласованности.

0
ответ дан 24 November 2019 в 07:02
поделиться

Добавьте соответствующие конструкторы:

class Foo
{
    public Foo(int a, string b)
    {
        A = a;
        B = b;
    }

    public Foo(Foo other)
    {
        A = other.A;
        B = other.B;
    }

    public int A { get; set; }
    public string B { get; set; }
}

Вы также должны рассмотреть возможность сделать его незыблемым, особенно если вы рассматриваете возможность его превращения в структуру. Изменяемые структуры - это зло.

Наконец, при наследовании от класса нет необходимости копировать членов из базового класса в подкласс.

-121--3448160-

В дополнение к FUSE, другим решением является экспорт файловой системы 9p . wmii делает это, например.

-121--3133537-

В идентификаторах допускаются как : , так и пробел. Без кавычек это вызвало бы неоднозначность при попытке определить, что именно составляет идентификатор.

0
ответ дан 24 November 2019 в 07:02
поделиться

Я оставляю цитату из презентации, которую Дуглас Крукфорд (создатель стандарта JSON) дал Yahoo.

Он рассказывает о том, как он обнаружил JSON, и среди прочего, почему он решил использовать цитируемых ключей :

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

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

Вот почему, по сей день, ключи цитируются в Json.

Вы можете найти полное видео и стенограмму здесь .

133
ответ дан 24 November 2019 в 07:02
поделиться

Если JSON описывает объекты, то на практике вы получаете следующее

var foo = {};

var bar = 1;

foo["bar"] = "hello";
foo[bar] = "goodbye";

так,

foo.bar == "hello";
foo[1] == "goodbye" // in setting it used the value of var bar

, поэтому, даже если ваши примеры создают тот же результат, их эквиваленты в «RAW CHED» « Может быть, вот почему ?? Данно, просто идея.

-3
ответ дан 24 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: