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

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

true

Однако PHP и Javascript действуют как "истина", действительно являются действительными 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

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

Итак, ваши варианты

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

Update:

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

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

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

Ответ 2

Это поможет вам.

$json_ps = '{"courseList":[  
            {"course":"1", "course_data1":"Computer Systems(Networks)"},  
            {"course":"2", "course_data2":"Audio and Music Technology"},  
            {"course":"3", "course_data3":"MBA Digital Marketing"}  
        ]}';

$ json_pss = json_decode ($ json_ps, true);

print_r ($ json_pss); Выход;