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

3

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

最近在Joomla virtuemart中的某段代码中工作时,我遇到了一个困惑的情况。Virtumart使用(object)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
将对象转换为数组只会影响到第一层元素。 - Steve
好的,现在我明白了 (y) - Anant
2个回答

3
这是因为json_decode()返回类型的缘故。
在json_decode($var)中,它将整个JSON数据作为对象返回,包括内部组件。(所有层级)
但是,json_decode($var, true)以数组结构返回整个JSON数据,包括内部组件。(所有层级)
因此,当使用(object)json_decode($var, true)时,json_data作为数组返回数据,只有最外层或主数组(第一层)被转换为对象。

-1
这是因为PHP将空数组视为JSON中的空列表。
$a = json_encode([]);
$b = json_decode($a);
$c = (object)json_decode($a, true);
var_dump($b, $c);

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

那些不是空的。我没有发布整个数据只是为了节省空间。 - Anant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接