recorrer leer json_decode example ejemplo array php json joomla virtuemart

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.