Почему JSON позволяет только string
быть ключом пары? Почему бы не использовать другие типы, такие как null
, number
, bool
, object
, array
? Учитывая, что JSON тесно связан с JavaScript, могу ли я сделать вывод о причине из спецификации JavaScript (ECMA-262)? Я совершенно новичок в JavaScript, не могли бы вы помочь мне указать на это.
Почему JSON позволяет использовать только строку в качестве ключа?
Ответы (3)
Формат JSON преднамеренно основан на подмножестве синтаксиса литерала объекта JavaScript и синтаксиса литерала массива, а объекты JavaScript могут иметь только строки в качестве ключей, поэтому ключи JSON также являются строками. (Хорошо, вы можете использовать числа как ключи объекта JavaScript, но на самом деле они преобразуются в строки.)
Обратите внимание, что суть JSON заключается в том, что это строковое представление данных, позволяющее легко обмениваться данными между программами, написанными на разных языках и работающими на разных машинах в разных средах. Если вы хотите использовать объект в качестве ключа, то этот объект, в свою очередь, должен быть каким-то образом представлен в виде строки для передачи, но тогда принимающий язык должен иметь возможность использовать объекты в качестве ключей, и это будет означать, что вам нужно ограниченное подмножество JSON для тех языков, которые были бы просто беспорядком.
«Учитывая, что JSON является частью JavaScript»
Нет, это не так. Новые браузеры предоставляют методы для создания и анализа JSON, но они не являются частью языка как такового, за исключением того, что JSON — это строковый формат, а JavaScript может обрабатывать строки. JSON всегда является строковым представлением — его необходимо проанализировать, чтобы создать объект для использования в JavaScript (или других языках), и как только это произойдет, JavaScript (или другие языки) обработает полученный объект так же, как любой другой объект.
(Обратите также внимание, что конкретный бит JSON не обязательно имеет какие-либо ключи: это может быть просто массив, например '["one","two","three"]'
.)
keys
, который сопоставляет строковые имена свойств с объектами, чтобы эти объекты становились своего рода виртуальными ключами. Ответ на ваш первоначальный вопрос: почему только строки? потому что это все, что нужно для целей JSON, и это то, на чем остановился первоначальный дизайнер.
- person nnnnnn; 16.02.2012
Основная причина, по мнению первооткрывателя представления JSON
, заключается в том,
при синтаксическом анализе данных JSON существует вероятность/возможность того, что ключ, который вы используете для ссылки на значение, может быть зарезервированным словом на вашем языке синтаксического анализа.
См. выступление Дугласа Крокфорда, первооткрывателя представление JSON.
Пример:
{
id: 1234,
name: "foo",
do: "somthing"
}
Поскольку JSON поддерживает разные языки, мы можем использовать этот набор данных на многих языках. Но слово do
является ключевым словом в Javascript
. Это приведет к синтаксической ошибке при разборе.
Потому что именно так была написана спецификация.