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

Является ли эта простая строка действительной JSON?

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

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

"12345"

Является ли вышеописанным JSON?

4b9b3361

Ответ 1

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

Путаница вокруг этого исходит от Дугласа Крокфорда RFC 4627, который первоначально определил тип интернет-медиа application/json в 2006 году. Он сказал, что:

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

Однако, как объяснил Крокфорд в сообщении в 2013 году (к сожалению,удалено с остальной частью Google+):

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

Строка примера является допустимым значением JSON, но было бы неправильно использовать ее в качестве полного тела "JSON text" HTTP-ответа application/json. Однако это уже не так: RFC-4627 был устаревшим в 2014 году с публикацией RFC 7159, которая позволяет использовать любое значение JSON:

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

"Стандарт для самого JSON" был также опубликован в 2013 году как ECMA-404, и JSON был также определен в редакции 5.1 спецификации ECMAScript (JavaScript) ECMA-262. Эти спецификации и большинство синтаксических анализаторов допускают любое значение JSON в виде полного текста JSON, даже если это просто простая строка.

Ответ 2

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

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

Ответ 3

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

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

Вы можете узнать больше о JSON в http://json.org.

Ответ 4

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

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

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

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

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

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

my <em>)

Для второго мнения см. JSON Lint:

Parse error on line 1:
"12345"
^
Expecting '{', '['

Ответ 5

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

Видеть http://www.json.org/