Каков правильный способ форматирования "true" в JSON?

Я хочу дать простой true ответ, но в соответствии с различные в формате JSON Парсеры, это не действительный JSON:

true

однако PHP и Javascript действуют как "true", действительно действительный JSON для true, как при кодировании, так и при декодировании:

PHP -

echo json_encode( true ); // outputs: true
echo json_decode( true ); // outputs: 1
echo gettype(json_decode( true )); // outputs: boolean

jQuery -

JSON.stringify( true );   // outputs: true
jQuery.parseJSON( true ); // outputs: true
typeof jQuery.parseJSON( true ); // outputs: boolean

Итак, каков правильный способ отправить true ответ в формате JSON? Являются валидаторы все неправильно?

1 ответов


С RFC :

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

  JSON-text = object / array

большинство парсеров не принимаю ничего, как корень, который не является объектом или массивом. Только менее строгие Парсеры примут, что ваша строка JSON содержит только true.

таким образом, ваши варианты

  • не использовать JSON
  • чтобы обернуть логическое значение в объект:{"result":true} или массив : [true]

обновление:

ситуация изменилась. Более новые версии спецификации JSON (см. этот) явно принимает любое сериализованное значение как корень документа:

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

это означает, что теперь юридически допустимо использовать логическое значение в качестве уникального значения. Но, конечно, не все используемые библиотеки обновляются, что подразумевает использование чего-либо, кроме объекта или массива, все еще может быть проблематичным.