Eu recebo um erro estranho usando json_decode()
. Ele decodificou corretamente os dados (eu o vi usando print_r
), mas quando tento acessar as informações dentro da matriz, recebo:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
Eu só tentei fazer: $result['context']
onde $result
os dados retornados porjson_decode()
Como posso ler valores dentro dessa matriz?
Respostas:
Use o segundo parâmetro de
json_decode
para fazê-lo retornar uma matriz:fonte
A função
json_decode()
retorna um objeto por padrão.Você pode acessar os dados assim:
Se você tiver identificadores como
from-date
(o hífen causaria um erro de PHP ao usar o método acima), você deve escrever:Se você deseja uma matriz, pode fazer algo assim:
Ou converter o objeto em uma matriz:
fonte
Você deve acessá-lo usando
->
uma vez que é um objeto.Mude seu código de:
Para:
fonte
if ($result->context = $var)
Isso faz com que a propriedade seja definida como var e retorna true, não importa.==
, no estado atual em que está atribuindo$var
valor$result->context
usando um único igual=
. E oif statement
lerá como se estivesse vazio ou não, e se$var
tiver valor, isso significa que não está vazio e sempre retornará verdadeiro.Tem o mesmo problema hoje, resolvido assim:
Se você ligar
json_decode($somestring)
, receberá um Objeto e precisará acessar como$object->key
, mas se você ligarjson_decode($somestring, true)
, receberá um dicionário e poderá acessar como$array['key']
fonte
Use
true
como o segundo parâmetro parajson_decode
. Isso decodificará o json em uma matriz associativa em vez destdObject
instâncias:Veja a documentação para mais detalhes.
fonte
Não é uma matriz, é um objeto do tipo stdClass.
Você pode acessá-lo assim:
Mais informações aqui: O que é stdClass no PHP?
fonte
Como o Manual do Php diz,
Quando usamos
json_decode();
, obtemos um objeto do tipo stdClass como tipo de retorno. Os argumentos que devem ser passados para dentroprint_r()
devem ser uma matriz ou uma string. Portanto, não podemos passar um objeto dentro deprint_r()
. Eu encontrei duas maneiras de lidar com isso.Lance o objeto para a matriz.
Isso pode ser alcançado da seguinte maneira.
Acessando a chave do objeto
Como mencionado anteriormente, quando você usa a
json_decode();
função, ele retorna um objeto de stdClass. você pode acessar os elementos do objeto com a ajuda do->
operador.Um, também pode usar várias chaves para extrair os subelementos, caso o objeto tenha matrizes aninhadas.
print_r()
Também existem outras opções , comovar_dump();
evar_export();
PS : Além disso, se você definir o segundo parâmetro de
json_decode();
paratrue
, ele converterá automaticamente o objeto em um.array();
Aqui estão algumas referências:
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
fonte
Para obter uma matriz como resultado de uma string json, você deve definir o segundo parâmetro como boolean true.
Caso contrário, $ result será um objeto std. mas você pode acessar valores como objeto.
fonte
Você pode converter o objeto stdClass em matriz como:
stdClsss para matriz
fonte
Quando você tenta acessá-lo como
$result['context']
, você o trata como uma matriz, o erro está dizendo que você está realmente lidando com um objeto, então você deve acessá-lo como$result->context
fonte
Aqui está a assinatura da função:
Quando param for false, que é o padrão, ele retornará um tipo de php apropriado. Você busca o valor desse tipo usando o paradigma object.method.
Quando param for verdadeiro, ele retornará matrizes associativas.
Ele retornará NULL por erro.
Se você deseja buscar valor através da matriz, defina assoc como true.
fonte
Às vezes, ao trabalhar com a API, você simplesmente deseja manter um objeto. Para acessar o objeto que contém objetos aninhados, você pode fazer o seguinte:
Assumiremos que quando você imprime o objeto, poderá ver o seguinte:
Para acessar a primeira parte do objeto:
E isso produziria "sucesso"
Agora vamos digitar as outras partes:
A saída esperada seria "Robert" com uma quebra de linha.
Você também pode reatribuir parte do objeto a outro objeto.
A saída esperada seria "Robert" com uma quebra de linha.
Para acessar a próxima tecla "1", o processo é o mesmo.
A saída esperada seria "EUA"
Espero que isso ajude você a entender objetos e por que queremos manter um objeto. Você não precisa converter um objeto em uma matriz para acessar suas propriedades.
fonte
em vez de usar os colchetes, use o operador de objeto, por exemplo, minha matriz baseada no objeto de banco de dados é criada assim em uma classe chamada DB:
para acessar as informações, eu uso esse código no script do controlador:
para exibir as informações, verifico se as chamadas de serviço foram definidas e têm uma contagem maior que 0; lembre-se de que não é uma matriz que estou referenciando, para acessar os registros com o operador de objeto "->", assim:
fonte
Eu obtive esse erro do nada porque meu login no Facebook parou de funcionar de repente (eu também havia mudado de host) e lançou esse erro. A correção é realmente fácil
O problema estava neste código
Basicamente, a função isset () espera uma matriz, mas encontra um objeto. A solução simples é converter o objeto PHP em array usando o quantificador (array) . O seguinte é o código fixo.
Observe o quantificador use off array () na primeira linha.
fonte
Mude para
fonte