Ich bekomme einen seltsamen Fehler mit json_decode()
. Es dekodiert die Daten korrekt (ich habe es mit gesehen print_r
), aber wenn ich versuche, auf Informationen innerhalb des Arrays zuzugreifen, erhalte ich:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
Ich habe versucht , nur das zu tun: $result['context']
wo $result
die Daten hat wieder durchjson_decode()
Wie kann ich Werte in diesem Array lesen?
Antworten:
Verwenden Sie den zweiten Parameter von
json_decode
, um ein Array zurückzugeben:quelle
Die Funktion
json_decode()
gibt standardmäßig ein Objekt zurück.Sie können auf die Daten folgendermaßen zugreifen:
Wenn Sie Bezeichner wie haben
from-date
(der Bindestrich würde bei Verwendung der obigen Methode einen PHP-Fehler verursachen), müssen Sie schreiben:Wenn Sie ein Array möchten, können Sie Folgendes tun:
Oder wandeln Sie das Objekt in ein Array um:
quelle
Sie müssen mit darauf zugreifen,
->
da es sich um ein Objekt handelt.Ändern Sie Ihren Code von:
Zu:
quelle
if ($result->context = $var)
Dies führt dazu, dass die Eigenschaft auf var gesetzt wird und true zurückgibt, unabhängig davon.==
. In Ihrem aktuellen Status weisen Sie einen$var
Wert zu,$result->context
indem Sie ein Single Equal verwenden=
. Und derif statement
wird es lesen, als ob es leer ist oder nicht, und wenn das$var
einen Wert hat, bedeutet das, dass es nicht leer ist und immer true zurückgibt.Habe heute das gleiche Problem, so gelöst:
Wenn Sie rufen
json_decode($somestring)
Sie ein Objekt erhalten wird , und Sie müssen Zugang wie$object->key
, aber wenn u nennenjson_decode($somestring, true)
werden Sie ein Wörterbuch und können den Zugriff bekommen$array['key']
quelle
Verwenden Sie
true
als zweiten Parameter zujson_decode
. Dadurch wird der JSON in ein assoziatives Array anstelle vonstdObject
Instanzen dekodiert :Weitere Informationen finden Sie in der Dokumentation .
quelle
Es ist kein Array, es ist ein Objekt vom Typ stdClass.
Sie können folgendermaßen darauf zugreifen:
Mehr Infos hier: Was ist stdClass in PHP?
quelle
Wie das PHP-Handbuch sagt,
Wenn wir verwenden
json_decode();
, erhalten wir ein Objekt vom Typ stdClass als Rückgabetyp. Die Argumente, die innerhalb von übergeben werdenprint_r()
sollen, sollten entweder ein Array oder eine Zeichenfolge sein. Daher können wir kein Objekt innerhalb von übergebenprint_r()
. Ich habe zwei Möglichkeiten gefunden, damit umzugehen.Wandeln Sie das Objekt in ein Array um.
Dies kann wie folgt erreicht werden.
Durch Zugriff auf den Schlüssel des Objekts
Wie bereits erwähnt, wird bei Verwendung der
json_decode();
Funktion ein Objekt von stdClass zurückgegeben. Sie können mit Hilfe von->
Operator auf die Elemente des Objekts zugreifen .Zum einen können auch mehrere Schlüssel verwendet werden, um die Unterelemente zu extrahieren, falls das Objekt verschachtelte Arrays hat.
Es gibt auch andere Möglichkeiten
print_r()
, wievar_dump();
undvar_export();
PS : Wenn Sie den zweiten Parameter von
json_decode();
to festlegentrue
, wird das Objekt automatisch in ein konvertiert.array();
Hier einige Referenzen:
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
quelle
Um ein Array als Ergebnis einer JSON-Zeichenfolge zu erhalten, sollten Sie den zweiten Parameter als boolean true festlegen.
Andernfalls ist $ result ein Standardobjekt. Sie können jedoch als Objekt auf Werte zugreifen.
quelle
Sie können das stdClass-Objekt wie folgt in ein Array konvertieren:
stdClsss zum Array
quelle
Wenn Sie versuchen, darauf zuzugreifen
$result['context']
, behandeln Sie es als Array. Der Fehler, der Ihnen sagt, dass Sie sich tatsächlich mit einem Objekt befassen, dann sollten Sie darauf zugreifen als$result->context
quelle
Hier ist die Funktionssignatur:
Wenn param false ist (Standardeinstellung), wird ein geeigneter PHP-Typ zurückgegeben. Sie rufen den Wert dieses Typs mithilfe des object.method-Paradigmas ab.
Wenn param wahr ist, werden assoziative Arrays zurückgegeben.
Bei einem Fehler wird NULL zurückgegeben.
Wenn Sie einen Wert über das Array abrufen möchten, setzen Sie assoc auf true.
quelle
Manchmal möchten Sie bei der Arbeit mit API einfach ein Objekt als Objekt behalten. Um auf das Objekt mit verschachtelten Objekten zuzugreifen, haben Sie folgende Möglichkeiten:
Wir gehen davon aus, dass beim Drucken des Objekts Folgendes angezeigt wird:
So greifen Sie auf den ersten Teil des Objekts zu:
Und das würde "Erfolg" ausgeben
Lassen Sie uns nun die anderen Teile eingeben:
Die erwartete Ausgabe wäre "Robert" mit einem Zeilenumbruch.
Sie können einen Teil des Objekts auch einem anderen Objekt zuweisen.
Die erwartete Ausgabe wäre "Robert" mit einem Zeilenumbruch.
Um auf die nächste Taste "1" zuzugreifen, ist der Vorgang der gleiche.
Die erwartete Ausgabe wäre "USA"
Hoffentlich hilft Ihnen dies dabei, Objekte zu verstehen und warum wir ein Objekt als Objekt behalten möchten. Sie sollten ein Objekt nicht in ein Array konvertieren müssen, um auf seine Eigenschaften zuzugreifen.
quelle
Anstatt die Klammern zu verwenden, verwenden Sie beispielsweise den Objektoperator. Mein auf einem Datenbankobjekt basierendes Array wird in einer Klasse namens DB folgendermaßen erstellt:
Um auf die Informationen zuzugreifen, verwende ich diesen Code im Controller-Skript:
Um dann die Informationen anzuzeigen, überprüfe ich, ob Servicecalls festgelegt wurden und eine Anzahl größer als 0 hat. Denken Sie daran, dass es sich nicht um ein Array handelt, auf das ich verweise. Daher greife ich mit dem Objektoperator "->" wie folgt auf die Datensätze zu:
quelle
Ich habe diesen Fehler aus heiterem Himmel erhalten, weil mein Facebook-Login plötzlich nicht mehr funktioniert (ich hatte auch die Hosts gewechselt) und diesen Fehler ausgelöst hat. Das Update ist wirklich einfach
Das Problem war in diesem Code
Grundsätzlich erwartet die Funktion isset () ein Array, findet aber stattdessen ein Objekt. Die einfache Lösung besteht darin, ein PHP-Objekt mithilfe eines (Array-) Quantifizierers in ein Array zu konvertieren . Das Folgende ist der feste Code.
Beachten Sie den Quantifizierer use off array () in der ersten Zeile.
quelle
Ändern Sie es für
quelle