Каков правильный способ форматирования "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.
это означает, что теперь юридически допустимо использовать логическое значение в качестве уникального значения. Но, конечно, не все используемые библиотеки обновляются, что подразумевает использование чего-либо, кроме объекта или массива, все еще может быть проблематичным.