2012-11-10 5 views
22

Считаете ли вы веб-ответ JSON: «Произошла ошибка сериализации»Является ли одно строковое значение допустимым JSON?

быть действительным? Или не

Некоторые валидатор принимает его: http://www.freeformatter.com/json-validator.html

и некоторые другие нет.

Сильвен

+0

Какой ответ вы говорите? Не могли бы вы поделиться этим? – Srinivas

+0

Я ссылался на однострочное значение: «Произошла ошибка сериализации» –

+0

Убедитесь, что ваша строка экранирована кавычками («»), то есть ее не только «Ошибка сериализации» , но '' Произошла ошибка сериализации "' – tuxSlayer

ответ

-3

Я не волнует, если какой-то валидатор принимает его. Это не правильно. Речь идет о хорошей практике, формат Json должен быть {"key": "value", .....}. Если вы считаете, что текст Json, может работать, но для остальных программистов это не серьезный Json. Если вы используете только этот текст, вам не нужен Json.

+0

Не так просто. Новые спецификации рассматривают одиночные значения как действительные JSON. –

+0

Рассмотрите случай JSON API, очень распространенный случай. При возврате 404 или другой ошибки, как должно быть закодировано значение в вашем мире? Я бы также предположил, что «серьезный Json» (конечно, вы имеете в виду «серьезный JSON»?) - это то, что определяет спецификация JSON. Для Интернета и приложения типа контента/json, который является RFC-7159 (https://tools.ietf.org/html/rfc7159), и он позволяет использовать чистую строку, в частности: «JSON-text = ws value ws [. ..] Значение JSON ДОЛЖНО быть объектом, массивом, числом или строкой, или одним из следующих трех буквенных имен: false null true ". –

0

От RFC4627:

A JSON text is a serialized object or array. 
    JSON-text = object/array 

И.Е., корневой элемент должен быть объект или массив, и не может быть строкой значение само по себе.

+0

[bump] (http://stackoverflow.com/a/24805020/2031077) – igor

10

Согласно грамматике воздействию в http://www.json.org/ (который ссылается на Standard ECMA-262 3rd Edition - December 1999 par.5.1.5 The JSON грамматику), это не так:

Начальный элемент должен быть:

enter image description here

enter image description here

, а затем значение может быть строкой:

enter image description here

+1

Hi Tony, Я тоже проконсультировал эту страницу, и у меня было такое же понимание. Но я хотел спросить сообщество, так как некоторые сайты (например, тот, который я поставил в качестве ссылки) рассматривают однострочное значение как действительный ответ json. Увидев ответы здесь, просто подтвердите, что это не имеет смысла. –

+0

Я пробовал этот сайт, и я согласен с тобой, кажется, вводит в заблуждение. Обычно я использую http://jsonlint.com/, который не принимает строку как действительный JSON: «Ошибка анализа в строке 1: « ciao » ^^Ожидание '{', '['". Сообщение об ошибке ясно: ожидается ожидание объекта или массива. –

24

Что касается нового JSON RFC, json, содержащий только одно значение, является действительно действительным.

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

+0

+1 Спасибо за обновление – fgb

+0

Да, это действительно так. Обратите внимание, что для лучшей интероперабельности вы можете вернуть один массив элементов: '[" value "]' –

16

Там есть изменение сердца на этом между RFC4627 и RFC7159:

RFC4627:

JSON текст сериализованная объект или массив.

JSON-text = object/array 

RFC7159:

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

JSON-text = ws value ws 

Нет философского или практического обоснования не предусмотрено для этого изменения сердца. Более ранняя версия, вероятно, имеет больше смысла, поскольку она последовательно диктует, что и элемент одиночного списка, и один элемент карты (пара или кортеж). Вторая версия позволяет исключить только один элемент списка.

Смежные вопросы