Я json_decode()
JSON-кодированную строку в json_decode()
и ожидаю, что ее вывод будет типом объекта, но вместо этого я получаю строковый тип. Как я могу вернуть объект?
В документах возвращается следующий объект:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json));
Однако, если я сначала json_encode()
а затем вызовет json_decode()
, вывод будет строкой, а не объектом:
$json = json_encode('{"a":1,"b":2,"c":3,"d":4,"e":5}'); var_dump(json_decode($json));
Это просто упрощенный пример. На практике то, что я делаю, это подталкивание JSON-кодированной строки в PHP через AJAX. Однако это иллюстрирует проблему преобразования этой закодированной строки JSON в объект, который я могу читать в PHP, например, « $json->a
».
Как вернуть тип объекта?
спасибо за ответы! Фактическим контекстом для этого вопроса я пользовался JSON Response от API. Но когда я делаю json_decode для этого ответа и пытаюсь получить доступ к значениям типа – $ json = json_decode (json response от API); echo $ json-> a, это дает мне ошибку: объект класса stdClass не может быть преобразован в строку
Функция json_encode
используется для кодирования собственного PHP-объекта или массива в формате JSON.
Например, $json = json_encode($arr)
где $arr
является
$arr = array( 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, );
вернет строку $json = '{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}'
. На этом этапе вам не нужно снова закодировать его с помощью json_encode
!
Чтобы получить массив обратно, просто выполните json_decode($json, true)
.
Если вы опустите true
из вызова json_decode
вы получите экземпляр stdClass
с различными свойствами, указанными в строке JSON.
Дополнительные сведения см. В следующих разделах:
var_dump(json_decode($json, true));
Вместо того, чтобы писать в массиве JSON, попробуйте сначала поместить его в массив PHP.
<?php $array = array( 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 ); //Then json_encode() $json = json_encode($array); echo $json; die; ?>
В этом случае вы используете ajax. Поэтому, когда вы получаете успех, вы можете сделать это:
$.ajax({ url: 'example.com', data: { }, success: function(data) { console.log(data); } });
Где после данных внутри console.log () можно добавить json var как data.a, data.b …
Кроме того, с помощью строки, которую вы предоставили, вам не нужно json_encode, поскольку она является alrady в json формате