json_decode($var) 和 (object)json_decode($var, true) 之间的区别
difference between json_decode($var) and (object)json_decode($var, true)
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 现在是对象,而不是像以前那样是数组,但是如何呢?任何解释将不胜感激。
这是因为 json_decode() return 类型
在json_decode($var)中,return将整个json数据作为对象,包括内部组件。 (所有级别)
但是,json_decode($var, true) return 数组结构中的整个 json 数据,包括内部组件。 (所有级别)
所以,当使用 (object)json_decode($var, true) 时,json_data returns data as array and only the outermost or main array (1st level)被投射到对象中。
这是因为 php 在 json 中将空数组视为空列表。
$a = json_encode([]);
$b = json_decode($a);
$c = (object)json_decode($a, true);
var_dump($b, $c);
可以发现$b是数组,$c是对象。在你的例子中,BT 和 ST 的值是空的 array/list,所以你有不同的结果。
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 现在是对象,而不是像以前那样是数组,但是如何呢?任何解释将不胜感激。
这是因为 json_decode() return 类型
在json_decode($var)中,return将整个json数据作为对象,包括内部组件。 (所有级别)
但是,json_decode($var, true) return 数组结构中的整个 json 数据,包括内部组件。 (所有级别)
所以,当使用 (object)json_decode($var, true) 时,json_data returns data as array and only the outermost or main array (1st level)被投射到对象中。
这是因为 php 在 json 中将空数组视为空列表。
$a = json_encode([]);
$b = json_decode($a);
$c = (object)json_decode($a, true);
var_dump($b, $c);
可以发现$b是数组,$c是对象。在你的例子中,BT 和 ST 的值是空的 array/list,所以你有不同的结果。