php - leer - diferencia entre json_decode($ var) y(object) json_decode($ var, true)
recorrer json php (2)
¿Hay alguna diferencia entre json_decode ($ var) y (object) json_decode ($ var, true)?
Mientras trabajaba recientemente en cierta pieza de código en Joomla virtuemart, llegué a una situación desconcertante. Virtumart usa (objeto) json_decode ($ var, true) para su cartObject, y si lo cambio a json_decode simple ($ var), muestra algún error después. En una mayor depuración encontré la estructura del carro como:
stdClass Object
(
[cartProductsData] => Array
(
)
[vendorId] => 0
[automaticSelectedShipment] =>
[automaticSelectedPayment] =>
[order_number] =>
[BT] => Array
(
)
[ST] => Array
(
)
)
Aunque al cambiar el código, es decir, json_decode ($ var), el resultado es:
stdClass Object
(
[cartProductsData] => Array
(
)
[vendorId] => 0
[automaticSelectedShipment] =>
[automaticSelectedPayment] =>
[order_number] =>
[BT] => stdClass Object
(
)
[ST] => stdClass Object
(
)
)
Entonces, BT y ST son objetos ahora, en lugar de matrices, como antes, pero ¿cómo? Cualquier explicación sería apreciada.
Esto se debe a que php trata el conjunto vacío como una lista vacía en json.
$a = json_encode([]);
$b = json_decode($a);
$c = (object)json_decode($a, true);
var_dump($b, $c);
usted puede encontrar que $ b es una matriz, pero $ c es un objeto. en su caso, el valor de BT y ST es una matriz / lista vacía, por lo que tiene un resultado diferente.
Esto se debe a que, del tipo de retorno json_decode ()
En json_decode ($ var), devuelve todos los datos json como objeto, incluidos los componentes internos. (Todos los niveles)
Pero, json_decode ($ var, true) devuelve datos json completos en la estructura de la matriz, incluidos los componentes internos. (Todos los niveles)
Entonces, cuando se utiliza (objeto) json_decode ($ var, true), json_data devuelve los datos como una matriz y solo la matriz más externa o principal (1er nivel) se convierte en objeto.