[php] Kann das Objekt vom Typ stdClass nicht als Array verwendet werden?


Answers

Die Funktion json_decode() gibt standardmäßig ein Objekt zurück.

Sie können auf die Daten wie folgt zugreifen:

var_dump($result->context);

Wenn Sie Bezeichner wie from-date (der Bindestrich würde bei Verwendung der obigen Methode einen PHP-Fehler verursachen), müssen Sie Folgendes schreiben:

var_dump($result->{'from-date'});

Wenn Sie ein Array wollen, können Sie so etwas tun:

$result = json_decode($json, true);

Oder wirf das Objekt auf ein Array:

$result = (array) json_decode($json);
Question

Ich bekomme einen seltsamen Fehler mit json_decode() . Es dekodiert die Daten korrekt (ich sah es mit print_r ), aber wenn ich versuche, auf Informationen innerhalb des Arrays zuzugreifen, bekomme ich:

Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108

Ich habe nur versucht: $result['context'] wobei $result die von json_decode() Daten hat

Wie kann ich Werte in diesem Array lesen?




Verwenden Sie true als zweiten Parameter für json_decode . Dies dekodiert den JSON in ein assoziatives Array anstelle von stdObject Instanzen:

$my_array = json_decode($my_json, true);

Weitere Informationen finden Sie in json_decode() .




Wenn Sie versuchen, auf es als $result['context'] zuzugreifen, behandeln Sie es als ein Array, den Fehler, der Ihnen sagt, dass Sie tatsächlich mit einem Objekt zu tun haben, dann sollten Sie darauf als $result->context




Ich habe diesen Fehler aus heiterem Himmel bekommen, weil mein Facebook-Login plötzlich nicht mehr funktioniert (ich habe auch die Hosts gewechselt) und diesen Fehler ausgelöst habe. Die Lösung ist wirklich einfach

Das Problem war in diesem Code

  $response = (new FacebookRequest(
    FacebookSession::newAppSession($this->appId, $this->appSecret),
    'GET',
    '/oauth/access_token',
    $params
  ))->execute()->getResponse(true);

  if (isset($response['access_token'])) {       <---- this line gave error
    return new FacebookSession($response['access_token']);
  }

Grundsätzlich erwartet die Funktion isset () ein Array, sucht aber stattdessen ein Objekt. Die einfache Lösung besteht darin, ein PHP-Objekt mit (Array-) Quantifizierer in ein Array zu konvertieren. Das Folgende ist der feste Code.

  $response = (array) (new FacebookRequest(
    FacebookSession::newAppSession($this->appId, $this->appSecret),
    'GET',
    '/oauth/access_token',
    $params
  ))->execute()->getResponse(true);

Beachten Sie, dass der Array-Quantor () in der ersten Zeile verwendet wird.




Habe heute dasselbe Problem, gelöst wie folgt:

Wenn Sie json_decode($somestring) Sie ein Objekt und Sie müssen auf $object->key , aber wenn Sie json_decode($somestring, true) Sie ein Dictionary und können auf $array['key'] zugreifen $array['key']




Sie können das stdClass-Objekt wie folgt in ein Array konvertieren:

$array = (array)$stdClass;

stdClsss zum Array




Related



Tags

php php   json json