На момент написания статьи JSON был описан исключительно в RFC4627 . Он описывает (в начале «2») текст JSON как сериализованный объект или массив.
Это означает, что только {}
и []
являются действительными, полные строки JSON в синтаксических анализаторах и строковых преобразователях, которые соответствуют этому стандарту.
Однако , введение ECMA-404 меняет это, и обновленный совет можно прочитать здесь . Я также написал сообщение в блоге по проблеме.
Однако, чтобы еще больше запутать этот вопрос, JSON
объект (например, JSON.parse()
и JSON.stringify()
), доступный в веб-браузерах, ситуацию , стандартизирован в ES5 , и это четко определяет приемлемые тексты JSON, например, так:
Формат обмена JSON, используемый в этой спецификации, в точности соответствует RFC 4627 с двумя исключениями:
Это будет означать, что все значения JSON (включая строки, нули и числа) принимаются объектом JSON, даже если объект JSON технически соответствует RFC 4627.
Обратите внимание, что вы могли бы поэтому преобразовать число в соответствующий браузер через JSON.stringify(5)
, который был бы отклонен другим синтаксическим анализатором, который соответствует RFC4627, но у которого нет определенного исключения, перечисленного выше. Например, может показаться , что Ruby является одним из таких примеров, который принимает в качестве корневого объекта только объекты и массивы . PHP, с другой стороны, специально добавляет исключение, что «он также будет кодировать и декодировать скалярные типы и NULL».