Эта простая строка считается допустимым JSON? - PullRequest
55 голосов
/ 20 сентября 2011

Я видел так много сложных вопросов в SO, считается ли некоторая сложная структура допустимой JSON.

Но как насчет чего-то на другом конце спектра?

"12345"

Является ли вышеуказанный JSON верным?

Ответы [ 5 ]

60 голосов
/ 20 сентября 2011

Это допустимый синтаксис JSON, представляющий значение JSON . Является ли действительный JSON текст (формальный термин, используемый для обозначения полного вывода генератора JSON), зависит от контекста.

В Douglas Crockford's RFC 4627 , опубликованном в 2006 году (который определяет application/json тип интернет-медиа):

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

Следовательно, было бы недопустимо использовать эту простую строку в качестве полного тела HTTP-ответа с типом интернет-медиа application/json.

Однако спецификация JSON была обновлена ​​в RFC 7159 , опубликованном в 2014 году, а также в редакции 5.1 ECMA-262 и в ECMA-404 . Новые спецификации не имеют вышеуказанного ограничения, и поэтому будет считать эту простую строку допустимым текстом JSON. В RFC 7159:

Текст JSON является сериализованным значением. Обратите внимание, что некоторые предыдущие спецификации JSON ограничивали текст JSON объектом или массивом. Реализации, которые генерируют только те объекты или массивы, для которых требуется текст JSON, будут взаимодействовать в том смысле, что все реализации будут принимать их как соответствующие тексты JSON.


A JSON значение , из json.org :

15 голосов
/ 30 октября 2015

По состоянию на 2014 год RFC 7159 устарел более ранние RFC JSON и объявляет, что любое значение JSON является допустимым текстом JSON и допустимым содержимым application / json - включая строки.Однако это также указывает на проблему несовместимости со старыми реализациями JSON:

Обратите внимание, что некоторые предыдущие спецификации JSON ограничивали текст JSON объектом или массивом.Реализации, которые генерируют только те объекты или массивы, для которых требуется текст JSON, будут совместимы в том смысле, что все реализации примут их как соответствующие тексты JSON.

6 голосов
/ 20 сентября 2011

Это допустимая строка JSON, но не действительный текст JSON (т.е. файл JSON).

См. спецификацию JSON , которая гласит:

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

Так что вы можете использовать это внутри некоторого JSON, но это не полный файл JSON сам по себе.

(Стоит также отметить, что спецификация определяет синтаксический анализатор JSON:

Анализатор JSON преобразует текст JSON в другое представление.

мой <em>)

Второе мнение см. JSON Lint :

Parse error on line 1:
"12345"
^
Expecting '{', '['
5 голосов
/ 20 сентября 2011

Это допустимая строка JSON, но не объект JSON.

См. http://www.json.org/

2 голосов
/ 20 сентября 2011

Нет, это недопустимый JSON.JSON является аббревиатурой от JavaScript Object Notation.Хотя приведенный вами пример будет действительным внутри объекта, определенного с помощью JSON, сам по себе он недопустим.Посмотрите на этот онлайн-валидатор JSON: http://jsonlint.com/

Ошибка разбора в строке 1: 12345 ^ Ожидается '{', '['

Вы можете прочитать большео JSON на http://json.org.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...