2016-07-22 62 views
5

czy jest jakaś różnica między json_decode ($ var) a (object) json_decode ($ var, true)?

Podczas pracy z pewnym kodem w wirtualnym świecie Joomla, doszedłem do zdziwionej sytuacji. Virtumart używa (obiekt) json_decode ($ var, true) dla jego cartObject, a jeśli zmienię go na prosty json_decode ($ var), to pokaże później pewien błąd. Przy dalszym debugowania Znalazłem struktury koszyka Już:

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

choć w zmieniającym kodu, tj json_decode ($ zmienna), wynik jest:

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

Więc BT i ST są obiektami teraz, raczej niż tablice, tak jak wcześniej, ale jak? Jakiekolwiek wyjaśnienie byłoby docenione.

+2

Przesyłanie do obiektu powoduje tylko zmianę elementów 1. poziomu tablicy. – Steve

+0

ok. teraz mam to (y) – Anant

Odpowiedz

2

to dlatego, że od json_decode() Typ powrotnej

W json_decode ($ zmienna), zwraca całość danych json z obiektem oraz wewnętrznych części składowych. (Wszystkie poziomy)

Ale, json_decode ($ var, true) zwraca całe dane JSONA w strukturze macierzy, włączając wewnętrzne komponenty. (Wszystkie poziomy)

Tak więc, gdy użyto (obiekt) json_decode ($ var, true), json_data zwraca dane jako tablicę i tylko najbardziej zewnętrzna lub główna tablica (1 poziom) zostanie rzucona do obiektu.

-1

Jest tak, ponieważ php traktuje pustą tablicę jako pustą listę w json.

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

można znaleźć, że $ b jest tablicą, ale $ c jest obiektem. w twoim przypadku wartość BT i ST jest pustą tablicą/listą, więc masz inny wynik.

+0

Te nie są puste. Nie opublikowałem wszystkich danych tylko po to, by zaoszczędzić miejsce. – Anant