Почему JSON позволяет только строка быть ключом? - PullRequest
11 голосов
/ 16 февраля 2012

Почему JSON допускает использование ключа string только в паре? Почему не другие типы, такие как null, number, bool, object, array? Учитывая, что JSON тесно связан с JavaScript, могу ли я определить причину из спецификации JavaScript (ECMA-262)? Я новичок в JavaScript, не могли бы вы мне помочь.

Ответы [ 3 ]

7 голосов
/ 16 февраля 2012

Формат JSON сознательно основан на подмножестве литерального синтаксиса объекта JavaScript и литерального синтаксиса массива, а объекты JavaScript могут иметь только строки в качестве ключей - таким образом, ключи JSON также являются строками. (Хорошо, вы можете сортировать числа в качестве ключей объектов JavaScript, но на самом деле они преобразуются в строки.)

Обратите внимание, что смысл JSON в том, что это строковое представление данных, позволяющее легко обмениваться программами, написанными на разных языках, работающих на разных машинах в разных средах. Если вы хотите использовать объект в качестве ключа, то этот объект, в свою очередь, должен быть как-то представлен в виде строки для передачи, но тогда принимающему языку нужно будет иметь возможность использовать объекты в качестве ключей, и это будет означать, что вам потребуется ограниченное подмножество JSON для тех языков, которые были бы просто беспорядком.

«Учитывая, что JSON является частью JavaScript»

Нет, это не так. Более новые браузеры предоставляют методы для создания и анализа JSON, но они не являются частью языка как такового, за исключением того, что JSON является строковым форматом, а JavaScript может выполнять строки. JSON всегда строковое представление - его необходимо проанализировать, чтобы создать объект для использования в JavaScript (или других языках), и как только это произойдет, JavaScript (или другие языки) будут обрабатывать полученный объект так же, как и любой другой. другой объект.

(Обратите также внимание, что конкретный бит JSON вовсе не обязательно должен иметь какие-либо ключи: это может быть просто массив, например '["one","two","three"]'.)

3 голосов
/ 21 апреля 2016

Основная причина, согласно открывателю представления JSON, заключается в том, что "при анализе данных json существует вероятность / вероятность того, что key, который вы используете для ссылки на value, можетreserved word на вашем языке синтаксического анализа "

См. Этот доклад Дугласа Крокфорда, который является исследователем представления JSON.

Пример: { id: 1234, name: "foo", do: "somthing" }

Поскольку JSON совместим между языками, мы можем использовать этот набор данных на многих языках.Но слово do является ключевым словом в Javascript.Это приведет к синтаксической ошибке при разборе.

0 голосов
/ 16 февраля 2012

Потому что именно так была написана спецификация.

...