Me sale un error extraño usando json_decode()
. Decodifica correctamente los datos (lo vi usando print_r
), pero cuando intento acceder a la información dentro de la matriz obtengo:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
Solo intenté hacer: ¿ $result['context']
dónde $result
ha devuelto los datos?json_decode()
¿Cómo puedo leer valores dentro de esta matriz?
Respuestas:
Use el segundo parámetro de
json_decode
para que devuelva una matriz:fuente
La función
json_decode()
devuelve un objeto por defecto.Puede acceder a los datos de esta manera:
Si tiene identificadores como
from-date
(el guión podría causar un error de PHP al usar el método anterior) debe escribir:Si desea una matriz, puede hacer algo como esto:
O lanzar el objeto a una matriz:
fuente
Debe acceder a él
->
ya que es un objeto.Cambia tu código de:
A:
fuente
if ($result->context = $var)
Esto hace que la propiedad se establezca en var y devuelve verdadero, no importa.==
, en su estado actual al que le está asignando$var
valor$result->context
usando un solo igual=
. Yif statement
lo leerá como si estuviera vacío o no, y si$var
tiene valor, eso significa que no está vacío y siempre devolverá verdadero.Tiene el mismo problema hoy, resuelto así:
Si llamas
json_decode($somestring)
, obtendrás un Objeto y necesitas acceder como$object->key
, pero si llamasjson_decode($somestring, true)
obtendrás un diccionario y podrás acceder como$array['key']
fuente
Use
true
como segundo parámetro parajson_decode
. Esto decodificará el json en una matriz asociativa en lugar destdObject
instancias:Consulte la documentación para más detalles.
fuente
No es una matriz, es un objeto de tipo stdClass.
Puedes acceder de esta manera:
Más información aquí: ¿Qué es stdClass en PHP?
fuente
Como dice el Manual de Php ,
Cuando usamos
json_decode();
, obtenemos un objeto de tipo stdClass como tipo de retorno. Los argumentos, que se deben pasar dentro de,print_r()
deben ser una matriz o una cadena. Por lo tanto, no podemos pasar un objeto dentro deprint_r()
. Encontré 2 formas de lidiar con esto.Lanza el objeto a la matriz.
Esto se puede lograr de la siguiente manera.
Al acceder a la clave del Objeto
Como se mencionó anteriormente, cuando usa la
json_decode();
función, devuelve un Objeto de stdClass. Puede acceder a los elementos del objeto con la ayuda del->
operador.Uno, también puede usar varias claves para extraer los subelementos en caso de que el objeto tenga matrices anidadas.
print_r()
También hay otras opciones para , comovar_dump();
yvar_export();
PD : Además, si configura el segundo parámetro de
json_decode();
totrue
, convertirá automáticamente el objeto en An.array();
Aquí hay algunas referencias:
http://php.net/manual/en/function.print-r.php
http: // php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
fuente
Para obtener una matriz como resultado de una cadena json, debe establecer el segundo parámetro como verdadero booleano.
De lo contrario, $ result será un objeto estándar. pero puedes acceder a los valores como objeto.
fuente
Puede convertir el objeto stdClass en una matriz como:
stdClsss a array
fuente
Cuando intentas acceder a él como
$result['context']
si lo trataras como una matriz, el error te indica que en realidad estás tratando con un objeto, entonces debes acceder a él como$result->context
fuente
Aquí está la firma de la función:
Cuando param es falso, que es el valor predeterminado, devolverá un tipo de php apropiado. Obtiene el valor de ese tipo utilizando el paradigma object.method.
Cuando param es verdadero, devolverá matrices asociativas.
Devolverá NULL en caso de error.
Si desea obtener valor a través de la matriz, establezca assoc en true.
fuente
A veces, cuando se trabaja con API, simplemente desea mantener un objeto en un objeto. Para acceder al objeto que tiene objetos anidados, puede hacer lo siguiente:
Asumiremos que cuando imprime_r el objeto puede ver esto:
Para acceder a la primera parte del objeto:
Y eso generaría "éxito"
Ahora tecleemos las otras partes:
El resultado esperado sería "Robert" con un salto de línea.
También puede reasignar parte del objeto a otro objeto.
El resultado esperado sería "Robert" con un salto de línea.
Para acceder a la siguiente clave "1", el proceso es el mismo.
El resultado esperado sería "EE. UU."
Esperemos que esto lo ayude a comprender los objetos y por qué queremos mantener un objeto en un objeto. No debería necesitar convertir un objeto en una matriz para acceder a sus propiedades.
fuente
en lugar de usar los corchetes, use el operador de objeto, por ejemplo, mi matriz basada en un objeto de base de datos se crea así en una clase llamada DB:
para acceder a la información uso este código en el script del controlador:
luego para mostrar la información que verifico para ver si las llamadas de servicio se han configurado y tienen un recuento mayor que 0 recuerde que no es una matriz a la que me refiero, así que accedo a los registros con el operador de objeto "->" de esta manera:
fuente
Obtuve este error de la nada porque mi inicio de sesión de Facebook dejó de funcionar repentinamente (también había cambiado de host) y arrojé este error. La solución es realmente fácil.
El problema estaba en este código
Básicamente, la función isset () espera una matriz pero en su lugar encuentra un objeto. La solución simple es convertir un objeto PHP a una matriz usando el cuantificador (matriz) . El siguiente es el código fijo.
Tenga en cuenta el uso del cuantificador off array () en la primera línea.
fuente
Cámbialo por
fuente