Спецификация JSON говорит, что JSON является объектом или массивом. В случае объекта,
Структура объекта представлена как пара фигурных скобок, окружающих нуль или больше пар имя/значение (или участники). Имя является строкой...
И позже, спецификация говорит, что строка окружается в кавычках.
Почему?
Таким образом,
{"Property1":"Value1","Property2":18}
и нет
{Property1:"Value1",Property2:18}
Вопрос 1: почему бы не позволить имени в парах имя/значение быть закрывшими кавычки идентификаторами?
Вопрос 2: существует ли семантическое различие между этими двумя представлениями выше при оценке в JavaScript?
Вопрос 1: почему бы не разрешить название в парах имени / значения, чтобы быть необоснованными идентификаторами?
Философия дизайна JSON - «Держать его простым»
«Имена цитаты с «
» » намного проще, чем « Вы можете цитировать имена с »
или
, но вам не нужно, если они Содержит определенные символы (или комбинации символов, которые будут иметь его ключевое слово), а «
или
, возможно, необходимо для указания в зависимости от того, какой разделитель вы выбрали« .
Вопрос 2: Существует ли смысловая разница между двумя представлениями выше, при оценке в JavaScript?
нет. В JavaScript они идентичны.
в объектах 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, что лучше всего ставить все идентификаторы в строки для согласованности.
Добавьте соответствующие конструкторы:
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- В идентификаторах допускаются как :
, так и пробел. Без кавычек это вызвало бы неоднозначность при попытке определить, что именно составляет идентификатор.
Я оставляю цитату из презентации, которую Дуглас Крукфорд (создатель стандарта JSON) дал Yahoo.
Он рассказывает о том, как он обнаружил JSON, и среди прочего, почему он решил использовать цитируемых ключей :
.... Это было, когда мы обнаружили Безкоманная проблема имени. Оказывается Ecma Script 3 имеет сдержанный удар Политика слова. Зарезервированные слова должны быть цитируется в ключевой позиции, которая действительно неприятность. Когда я перешел сформировать это в стандарт, я не хотел, чтобы поставить все Зарезервированные слова в стандарте, Потому что это будет выглядеть действительно глупо.
В то время я пытался убедить Люди: Да, вы можете написать Приложения в JavaScript, это на самом деле собираюсь работать, и это хорошо язык. Тогда я не хотел говорить, В то же время: и посмотри на это Действительно глупо, что они сделали! Так что я Решили, вместо этого давайте просто процитируем Ключи.
Таким образом, нам не нужно говорить Кто-нибудь о том, как это удара.Вот почему, по сей день, ключи цитируются в Json.
Вы можете найти полное видео и стенограмму здесь .
Если 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» « Может быть, вот почему ?? Данно, просто идея.