Может ли массив быть JSON-текстом верхнего уровня?

за дебаты в этом сообщении: json-conversion-in-javascript

Ответ 1

Да, массив является законным как JSON-текст верхнего уровня.

Существует три стандартных документа, определяющих JSON: RFC 4627, RFC 7159 (который устарел RFC 4627) и ECMA-404. Они отличаются тем, какие элементы верхнего уровня они позволяют, но все позволяют объекту или массиву как элемент верхнего уровня.

  • RFC 4627: объект или массив.
    " Текст JSON - это сериализованный объект или массив".
  • RFC 7159: любое значение JSON.
    " Текст JSON - это сериализованное значение".
  • ECMA-404: любое значение JSON.
    " Текст JSON - это последовательность токенов, сформированных из кодовых точек Unicode, которые соответствуют значению JSON грамматика ".

Ответ 2

Да, но вы должны подумать о том, чтобы сделать корневой объект вместо этого в некоторых сценариях, из-за JSON hijacking. Это уязвимость раскрытия информации, основанная на переопределении конструктора массива в JavaScript.

Ответ 3

Это из спецификации ECMAScript.

JSONText :
    JSONValue

JSONValue :
    JSONNullLiteral 
    JSONBooleanLiteral 
    JSONObject 
    JSONArray 
    JSONString 
    JSONNumber

Ответ 5

Существует некоторая путаница, замеченная в других комментариях. Медиа-тип "application/json" позволяет использовать только объект или массив на верхнем уровне для JSON-текста, за JSON RFC. Однако для анализатора допустимо любое значение JSON, как показано в спецификации ECMAScript.