json_edecode($var)和(object)json_edecade($var,true)之间的差异


difference between json_decode($var) and (object)json_decode($var, true)

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

最近在Joomla virtualmart中处理某段代码时,我遇到了一个困惑的情况。Virtumart使用(object)json_decode($var,true)作为它的cartObject,如果我把它改为简单的json_edecode($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现在是对象,而不是以前的数组,但怎么做呢?如有任何解释,不胜感激。

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

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

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

因此,当使用(object)json_decode($var,true)时,json_data将数据作为数组返回,并且只有最外层或主数组(第一级)被投射到对象中。

这是因为php将空数组视为json中的空列表。

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

您可以发现$b是一个数组,但$c是一个对象。在您的情况下,BT和ST的值是空数组/列表,所以您会得到不同的结果。