Помните, что JSON является в основном просто javascript и является буквально просто текстовой строкой. Оба PHP и Javascript имеют true
и false
константы:
php > var_dump(json_decode(true)); // php constant "true", maps to int 1
int(1)
php > var_dump(json_decode('true')); // php string/javascript constant true
bool(true)
php > var_dump(json_decode('"true"')); // json-encoded string "true"
string(4) "true"
Ваш "123"
может быть PHP строку, что приводит к некоторым странностям:
php > var_dump(json_encode(123));
string(3) "123"
php > var_dump(json_encode("123"));
string(5) ""123"" // not quite what you'd expect.
php > var_dump(json_encode('123'));
string(5) ""123"" // also somewhat unexpected
php > var_dump(json_decode(123));
int(123)
php > var_dump(json_decode('123'));
int(123)
php > var_dump(json_decode('"123"'));
string(3) "123"
Зачем 'json_encode/json_decode' неудачу на не-массив стоимость? – DiMono
в соответствии с [PHP Manual] (http://php.net/manual/en/function.json-decode.php), NULL возвращается, если json не может быть декодирован или если кодированные данные глубже предела рекурсии. Я думаю, что «123» не является допустимым форматом JSON, поэтому он должен потерпеть неудачу. Правильно ли мое понимание? –
@DiMono - * Текст JSON - это сериализованный объект или массив. * - [Спецификация JSON] (http://www.ietf.org/rfc/rfc4627.txt) – Quentin