Подтвердить что ты не робот

Публикация ECMA-404 повлияла на достоверность текстов JSON, таких как "2" или "привет"?

Являются ли следующие допустимые тексты JSON или их значение верхнего уровня является массивом или объектом?

4.0
"Hello World"
true

Связанные вопросы в прошлом, такие как Каков минимальный допустимый JSON? и Является ли эта простая строка считающейся действительной JSON? пришли к выводу, что это не так. Это было основано на описании формата JSON в RFC- 4627, в котором говорится, что:

2. JSON Grammar

Текст JSON - это последовательность токенов. Набор токенов включает шесть   структурные символы, строки, числа и три буквальных имени.

Текст JSON представляет собой сериализованный объект или массив.

 JSON-text = object / array

Это шесть структурных символов:

[...]

Однако статус RFC-4627 заявляет, что он "не указывает ни одного интернет-стандарта любого типа". Вместо этого официальным стандартом для JSON является недавно опубликованный ECMA-404. В отличие от RFC-4627, описание допустимого текста JSON в ECMA-404 не включает требования о том, что это объект или массив. Например, в разделе, который больше всего похож на приведенную выше цитату, отсутствует это требование:

4 Текст JSON

Текст JSON представляет собой последовательность токенов, сформированных из кодовых точек Unicode, которые соответствуют значению JSON грамматика. Набор жетонов включает шесть структурных маркеров, строк, цифр и трех буквенных жетонов.

Шесть структурных токенов:

[...]

Учитывая эту новую спецификацию, кодируются не-массивные значения не-объектов верхнего уровня, считающиеся действительными текстами JSON?

4b9b3361

Ответ 1

Дуглас Крокфорд опубликовал комментарий на этот пост в Google+, который помог мне начать разъяснять вещи:

JSON - это просто грамматика, а грамматика включает числа и строки. Использование JSON обязательно должно быть более ограничительным. RFC-4627 является одним из возможных вариантов использования и никогда не был стандартом для самого JSON.

Мы не можем сказать, что не-массивные не-объекты JSON-тексты, как правило, недействительны, просто недействительно использовать их с типом интернет-носителя application/json, на RFC-4627.

Представления не-объектных значений без массива являются допустимыми текстами JSON для ECMA-404, который является единственным в настоящее время стандартом, который может быть идентифицирован как "спецификация JSON".

Однако выясняется, что вскоре IETF опубликует замену RFC-4627, которая также будет спецификацией JSON. В своем последнем проекте все еще есть ограничение на тексты JSON, но также упоминается, что JSON указан в нескольких местах и ​​что эти спецификации несколько отличаются. В проекте конкретно упоминается, что определение JSON в ECMA-262 (спецификация ECMAScript/JavaScript) не разделяет ограничение значения верхнего уровня.

Следовательно, вопрос о том, являются ли не-объектные не-массивы действительными тексты JSON, необходимо устранить:

Является ли "hello" допустимым текстом JSON, указанным в RFC-4627 и его преемником?

Нет.

Является ли "hello" допустимым текстом JSON, указанным ECMA-404 и ECMA-262?

Да.