Fehler „Objekt vom Typ stdClass kann nicht als Array verwendet werden“

Lesezeit: 5 Minuten

Benutzeravatar von Dail
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

Jons Benutzeravatar
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

Benutzeravatar von JiNexus
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.

    – JiNexus

    16. November 2016 um 23:26 Uhr


  • Warum scheint diese Seite anzuzeigen, dass beide Syntaxen erlaubt sind: php.net/manual/en/sdo.sample.getset.php

    – kojow7

    8. Januar 2021 um 3:37 Uhr

  • @ 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

Benutzeravatar von Sander Marechal
Sander Marschall

Verwenden true als zweiter Parameter zu json_decode. Dadurch wird der JSON-Inhalt statt in ein assoziatives Array dekodiert stdObject Instanzen:

$my_array = json_decode($my_json, true);

Sehen die Dokumentation für mehr Details.

Benutzeravatar von Alexey Lysenko
Alexej Lysenko

Ich habe heute das gleiche Problem und so gelöst:

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

Benutzeravatar von Peter Mortensen
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.

  1. Wandeln Sie das Objekt in ein Array um.

    Dies kann wie folgt erreicht werden.

    $a = (array)$object;
    
  2. 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();

PS : Auch, wenn Sie den zweiten Parameter des einstellen json_decode(); Zu truewird das Objekt automatisch in eine 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

1450070cookie-checkFehler „Objekt vom Typ stdClass kann nicht als Array verwendet werden“

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy