
Harsha MV
Ich versuche, eine JSON-Zeichenfolge in ein Array zu decodieren, erhalte jedoch die folgende Fehlermeldung.
Schwerwiegender Fehler: Objekt vom Typ stdClass kann nicht als Array in C:\wamp\www\temp\asklaila.php in Zeile 6 verwendet werden
Hier ist der Code:
<?php
$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>

Stefan
Gem die Dokumentationmüssen Sie angeben true
als zweites Argument, wenn Sie statt eines Objekts ein assoziatives Array wünschen json_decode
. Das wäre der Code:
$result = json_decode($jsondata, true);
Falls Sie es wollen integer
Schlüssel anstelle der Eigenschaftsnamen:
$result = array_values(json_decode($jsondata, true));
Mit Ihrer aktuellen Dekodierung greifen Sie jedoch nur als Objekt darauf zu:
print_r($obj->Result);

dieEcho
Versuche dies
$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
Dies ist ein verspäteter Beitrag, aber es gibt einen triftigen Grund für das Casting json_decode
mit (array)
.
Folgendes berücksichtigen:
$jsondata="";
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
echo $v; // etc.
}
Wenn $jsondata
wird immer als leerer String zurückgegeben (wie es meiner Erfahrung nach oft der Fall ist), json_decode
wird zurückkehren NULL
was zu dem Fehler führt Warnung: Ungültiges Argument für foreach() in Zeile 3 angegeben. Sie könnten eine Zeile mit Wenn/Dann-Code oder einen ternären Operator hinzufügen, aber meiner Meinung nach ist es sauberer, Zeile 2 einfach in … zu ändern.
$arr = (array) json_decode($jsondata,true);
… es sei denn, Sie sind es json_decode
Wenn Sie Millionen großer Arrays gleichzeitig verwenden, kann die Leistung in diesem Fall, wie @TCB13 betont, negativ beeinflusst werden.
Entsprechend der PHP-Dokumentation json_decode
Die Funktion hat einen Parameter namens assoziiert die die zurückgegebenen Objekte in assoziative Arrays umwandeln
mixed json_decode ( string $json [, bool $assoc = FALSE ] )
Seit assoziiert Parameter ist FALSE
Standardmäßig müssen Sie diesen Wert auf einstellen TRUE
um ein Array abzurufen.
Untersuchen Sie den folgenden Code auf eine beispielhafte Implikation:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
was ausgibt:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

Coreyavis
Dadurch wird es auch in ein Array umgewandelt:
<?php
print_r((array) json_decode($object));
?>

Fehler
json_decode
zweites Argument unterstützen, wenn es auf gesetzt ist TRUE
es wird ein zurückgegeben Array
anstatt stdClass Object
. Überprüf den Handbuch Seite von json_decode
Funktion, um alle unterstützten Argumente und ihre Details anzuzeigen.
Versuchen Sie zum Beispiel Folgendes:
$json_string = 'http://www.example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE
print_r($obj['Result']); // Now this will works!
9902000cookie-checkjson_decode in ein Arrayyes
Es hätte funktioniert, wenn du mit zugegriffen hättest
$ob->Result
stattdessen.– Lappen
26. April 2018 um 7:56 Uhr