Harsha MV
Estoy tratando de decodificar una cadena JSON en una matriz, pero aparece el siguiente error.
Error fatal: no se puede usar el objeto de tipo stdClass como matriz
Aquí está el código:
$json_string = 'http://www.example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
Esteban
según la documentacióndebe especificar true
como segundo argumento si desea una matriz asociativa en lugar de un objeto de json_decode
. Este sería el código:
$result = json_decode($jsondata, true);
Si quieres integer
claves en lugar de los nombres de las propiedades:
$result = array_values(json_decode($jsondata, true));
Sin embargo, con su decodificación actual, solo accede a ella como un objeto:
print_r($obj->Result);
-
Plantea la pregunta, ¿cuáles son las ventajas de que regrese como una matriz y no como un objeto?
– Foxinni
16 de agosto de 2012 a las 13:31
-
Plantea la pregunta. Para “pedir una pregunta” significa asumir algo que queda por probar (árbitro). En cualquier caso, la ventaja podría ser que el OP se sienta más cómodo atravesando matrices que objetos, o que algún otro código, ya implementado, requiera una matriz.
– jamesnotjim
06/03/2013 a las 15:31
-
@jamesnotjim La implementación predeterminada que devuelve un objeto podría plantear la pregunta de que los objetos son mejores valores de retorno que las matrices, ¿no es así?
–David Mann
13 de noviembre de 2013 a las 2:43
-
De hecho, podría @DavidMann. ¡Touché!
– jamesnotjim
13 de noviembre de 2013 a las 18:53
-
Agregaría el comentario (aunque años después) de que no hay posibilidad de que JSON contenga nada más que datos, lo que hace que esta sea una opción “predeterminada” confusa.
– Barry
25 de julio de 2016 a las 16:13
xkeshav
prueba esto
$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
Esta es una contribución tardía, pero hay un caso válido para el casting. json_decode
con (array)
.
Considera lo siguiente:
$jsondata="";
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
echo $v; // etc.
}
Si $jsondata
alguna vez se devuelve como una cadena vacía (como en mi experiencia suele ser), json_decode
regresará NULL
resultando en el error Advertencia: Se proporcionó un argumento no válido para foreach() en la línea 3. Puede agregar una línea de código si/entonces o un operador ternario, pero en mi opinión, es más limpio simplemente cambiar la línea 2 a…
$arr = (array) json_decode($jsondata,true);
… a menos que seas json_decode
ing millones de arreglos grandes a la vez, en cuyo caso, como señala @ TCB13, el rendimiento podría verse afectado negativamente.
En caso de que esté trabajando en php menos de 5.2, puede usar este recurso.
http://techblog.willshouse.com/2009/06/12/using-json_encode-and-json_decode-in-php4/
De acuerdo con la Documentación PHP json_decode
función tiene un parámetro llamado asociado que convierten los objetos devueltos en matrices asociativas
mixed json_decode ( string $json [, bool $assoc = FALSE ] )
Desde asociado el parámetro es FALSE
de forma predeterminada, debe establecer este valor en TRUE
para recuperar una matriz.
Examine el siguiente código para ver una implicación de ejemplo:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
que salidas:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
coreyavis
Esto también lo cambiará a una matriz:
<?php
print_r((array) json_decode($object));
?>
avinash singh
json_decode($data, true); // Returns data in array format
json_decode($data); // Returns collections
Entonces, si desea una matriz, puede pasar el segundo argumento como ‘verdadero’ en json_decode
función.
Habría funcionado si accedieras con
$ob->Result
en cambio.– lapin
26 de abril de 2018 a las 7:56