json_decode($ var)和(object)之间的区别json_decode($ var,true)

时间:2016-07-22 10:43:45

标签: php json joomla virtuemart

json_decode($ var)和(object)json_decode($ var,true)之间有什么区别吗?

最近在Joomla virtuemart的某些代码处工作时,我遇到了一个困惑的情况。 Virtumart对其cartObject使用(对象)json_decode($ var,true),如果我将其更改为简单的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 个答案:

答案 0 :(得分:2)

这是因为,json_decode()返回类型

在json_decode($ var)中,它将整个json数据作为对象返回,包括内部组件。 (所有级别)

但是,json_decode($ var,true)返回数组结构中的整个json数据,包括内部组件。 (所有级别)

因此,当使用(object)json_decode($ var,true)时,json_data将数据作为数组返回,只有最外层或主数组(第1级)被转换为对象。

答案 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的值是空数组/列表,所以你有不同的结果。