2016-07-22 9 views
5

Gibt es einen Unterschied zwischen json_decode ($ var) und (Objekt) json_decode ($ var, true)?

Als ich kürzlich an einem bestimmten Code in Joomla virtuemart arbeitete, kam ich zu einer verwirrten Situation. Virtumart verwendet (Objekt) json_decode ($ var, true) für sein cartObject, und wenn ich es in json_decode ($ var) ändere, zeigt es später einen Fehler. Bei der weiteren Fehlersuche fand ich den Wagen Struktur wie:

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

Obwohl auf Wechselcode, dh json_decode ($ var), ist das Ergebnis:

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

So BT und ST sind jetzt Objekte, eher als Arrays wie früher, aber wie? Jede Erklärung wäre willkommen.

+2

Das Umwandeln in ein Objekt wirkt sich nur auf die Elemente der ersten Ebene eines Arrays aus. – Steve

+0

ok. Jetzt habe ich es (y) – Anant

Antwort

2

Dies liegt daran, von json_decode() Rückgabetyp

In json_decode ($ var), ist es die ganze json Daten als Objekt zurückgibt, einschließlich der inneren Komponenten. (Alle Ebenen)

Aber json_decode ($ var, true) gibt die gesamten JSON-Daten in der Array-Struktur zurück, einschließlich der inneren Komponenten. (Alle Stufen)

Wenn also (Objekt) json_decode ($ var, true) verwendet wird, gibt json_data Daten als Array zurück und nur das äußerste oder Haupt-Array (1. Ebene) wird in Objekt geworfen.

-1

Dies ist, weil PHP leeren Array als leere Liste in JSON behandeln.

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

Sie können feststellen, dass $ b ein Array ist, aber $ c ist ein Objekt. In Ihrem Fall ist der Wert von BT und ST leer Array/Liste, so dass Sie ein anderes Ergebnis haben.

+0

Das sind nicht leer. Ich habe nicht die ganzen Daten gepostet, nur um Platz zu sparen. – Anant

Verwandte Themen