2016-07-22 5 views
5

Есть ли разница между json_decode ($ var) и (object) json_decode ($ var, true)?

В последнее время, работая над определенным кодом в Joomla virtuemart, я пришел в недоумение. Virtumart использует (объект) json_decode ($ var, true) для своего cartObject, и если я изменю его на простой json_decode ($ var), после этого он покажет некоторую ошибку. При дальнейшем отладки я нашел телеги структуру, как:

stdClass Object 
(
    [cartProductsData] => Array 
     (
     ) 
    [vendorId] => 0 
    [automaticSelectedShipment] => 
    [automaticSelectedPayment] => 
    [order_number] => 
    [BT] => Array 
     (
     ) 
    [ST] => Array 
     (
     ) 
) 

Хотя на изменения кода, т.е. json_decode ($ Var), результат:

stdClass Object 
(
    [cartProductsData] => Array 
     (
     ) 
    [vendorId] => 0 
    [automaticSelectedShipment] => 
    [automaticSelectedPayment] => 
    [order_number] => 
    [BT] => stdClass Object 
     (
     ) 
    [ST] => stdClass Object 
     (
     ) 
) 

Так BT и ST являются объектами в настоящее время, а чем массивы, как раньше, но как? Любое объяснение будет оценено.

+2

Кастинг для объекта воздействует только на элементы 1-го уровня массива. – Steve

+0

ОК. теперь я получил его (y) – Anant

ответ

2

Это потому, что из json_decode() обратного типа

В json_decode ($ VAR), он возвращает целые данные JSON в качестве объекта, в том числе внутренних компонентов. (Все уровни)

Но json_decode ($ var, true) возвращает целые данные json в структуре массива, включая внутренние компоненты. (Все уровни)

Итак, когда (объект) используется json_decode ($ var, true), json_data возвращает данные как массив, и только внешний или основной массив (1-й уровень) попадает в объект.

-1

Это потому, что php обрабатывает пустой массив как пустой список в json.

$a = json_encode([]); 
$b = json_decode($a); 
$c = (object)json_decode($a, true); 
var_dump($b, $c); 

Вы можете найти, что $ b - массив, но $ c - объект. в вашем случае значение BT и ST - пустой массив/список, поэтому у вас есть другой результат.

+0

Те не пустые. Я не опубликовал все данные, чтобы сэкономить место. – Anant

Смежные вопросы