Fehler „Objekt vom Typ stdClass kann nicht als Array verwendet werden“
Lesezeit: 5 Minuten
Tag
Ich erhalte einen seltsamen Fehler bei der Verwendung von json_decode(). Es dekodiert die Daten korrekt (ich habe es gesehen 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 zu tun: $result['context'] Wo $result hat die Daten von zurückgegeben json_decode()
Wie kann ich Werte in diesem Array lesen?
$result = json_decode(‘the string’, true); Das Hinzufügen von true gibt das Ergebnis als Array und nicht als stdClass zurück.
– Nepaluz
19. April 2016 um 20:12 Uhr
Wow, gerade so eine große Facepalm gemacht. xD Habe die Funktion schon so oft benutzt und stolpere immer noch über diesen Fehler. 😀
– Sarah Multitasker
9. Juni 2021 um 14:27 Uhr
Jon
Verwenden Sie den zweiten Parameter von json_decode damit es ein Array zurückgibt:
$result = json_decode($data, true);
Die Funktion json_decode() gibt standardmäßig ein Objekt zurück.
So können Sie auf die Daten zugreifen:
var_dump($result->context);
Wenn Sie Kennungen wie haben from-date (der Bindestrich würde bei Verwendung der obigen Methode einen PHP-Fehler verursachen) müssen Sie schreiben:
var_dump($result->{'from-date'});
Wenn Sie ein Array möchten, können Sie Folgendes tun:
$result = json_decode($json, true);
Oder wandeln Sie das Objekt in ein Array um:
$result = (array) json_decode($json);
Ich habe eine Weile gebraucht, um dies zu finden, als ich versuchte, einen Weg zu finden, auf den _destroy-Wert in PHP zu verweisen, der von knockoutjs gesetzt wird, also +1
– deltree
28. März 2012 um 2:47 Uhr
Diese Antwort ist viel qualifizierter als die erste (am meisten bewertete) Antwort!
– Mojtaba Rezaeian
5. Dezember 2018 um 7:28 Uhr
JiNexus
Sie müssen darauf zugreifen, indem Sie verwenden -> da es ein Objekt ist.
Ändern Sie Ihren Code von:
$result['context'];
Zu:
$result->context;
Das Problem, das ich habe, ist der Versuch, die Eigenschaft in einer Bedingung zu verwenden if ($result->context = $var) Dies bewirkt, dass die Eigenschaft auf die Variable gesetzt wird und unabhängig davon wahr zurückgibt.
– STWilson
16. November 2016 um 21:28 Uhr
@STWilson Sie sollten ein doppeltes Gleichheitszeichen verwenden ==in Ihrem aktuellen Zustand weisen Sie zu $var Wert zu $result->context durch Verwendung eines einzigen Gleichheitszeichens =. Und das if statement wird es lesen, als ob es leer ist oder nicht, und wenn die $var hat dann einen Wert, das heißt, es ist nicht leer und wird immer wahr zurückgeben.
@ kojow7 Wenn Sie sich darauf beziehen $company->departments[0]->name Dies liegt daran, dass es mithilfe eines Array-Index direkt auf das Objekt zugreift. Die Struktur der Daten ist, dass Objekte in einem Array gespeichert werden.
– JiNexus
3. Februar 2021 um 22:40 Uhr
@JiNexus Ich meine die Beispiele Nr. 1 und Nr. 2 auf dieser Seite. Beispiel 1 besagt, dass Sie Folgendes verwenden können: $company->name = 'Acme'; und Beispiel #2 besagt, dass Sie Folgendes verwenden können: $company['name'] = 'UltraCorp';
– kojow7
4. Februar 2021 um 0:13 Uhr
Sander Marschall
Verwenden true als zweiter Parameter zu json_decode. Dadurch wird der JSON-Inhalt statt in ein assoziatives Array dekodiert stdObject Instanzen:
Wenn Sie anrufen json_decode($somestring)erhalten Sie ein Objekt und müssen auf like zugreifen $object->keyaber wenn Sie anrufen json_decode($somestring, true) Sie erhalten ein Wörterbuch und können gerne zugreifen $array['key'].
Das hat mir sooo viel Zeit gespart! Ich habe nicht den wahren Parameter eingegeben und versucht, als Array darauf zuzugreifen
– Meiham
7. Dezember 2018 um 23:07 Uhr
Lebensretter! Insbesondere mit echo json_decode('{"Contains Space":999}', true)['Contains Space'] . "\n";
– Neil Gatenby
23. November 2020 um 9:41 Uhr
Peter Mortensen
Es ist kein Array; es ist ein Objekt vom Typ stdClass.
Sie können wie folgt darauf zugreifen:
echo $oResult->context;
Weitere Informationen sind drin Was ist stdClass in PHP?.
Das hat mir sooo viel Zeit gespart! Ich habe nicht den wahren Parameter eingegeben und versucht, als Array darauf zuzugreifen
– Meiham
7. Dezember 2018 um 23:07 Uhr
Lebensretter! Insbesondere mit echo json_decode('{"Contains Space":999}', true)['Contains Space'] . "\n";
– Neil Gatenby
23. November 2020 um 9:41 Uhr
Als die Php-Handbuch sagen,
print_r — Druckt menschenlesbare Informationen über eine Variable
Wenn wir verwenden json_decode();erhalten wir als Rückgabetyp ein Objekt vom Typ stdClass. Die Argumente, die innerhalb von übergeben werden sollen print_r() sollte entweder ein Array oder ein String sein. Daher können wir ein Objekt nicht innerhalb von übergeben print_r(). Ich habe 2 Möglichkeiten gefunden, damit umzugehen.
Wandeln Sie das Objekt in ein Array um.
Dies kann wie folgt erreicht werden.
$a = (array)$object;
Durch Zugriff auf den Schlüssel des Objekts
Wie bereits erwähnt, wenn Sie verwenden json_decode(); Funktion gibt sie ein Objekt der stdClass zurück. Mit Hilfe von können Sie auf die Elemente des Objekts zugreifen -> Operator.
$value = $object->key;
One kann auch mehrere Schlüssel verwenden, um die Unterelemente zu extrahieren, falls das Objekt verschachtelte Arrays hat.
$value = $object->key1->key2->key3...;
Es gibt andere Möglichkeiten print_r() auch, wie var_dump(); Und var_export();
$result = json_decode(‘the string’, true); Das Hinzufügen von true gibt das Ergebnis als Array und nicht als stdClass zurück.
– Nepaluz
19. April 2016 um 20:12 Uhr
Wow, gerade so eine große Facepalm gemacht. xD Habe die Funktion schon so oft benutzt und stolpere immer noch über diesen Fehler. 😀
– Sarah Multitasker
9. Juni 2021 um 14:27 Uhr