Verwenden Sie json_decode(), um ein Array anstelle eines Objekts zu erstellen

Lesezeit: 3 Minuten

Benutzeravatar von Harsha MV
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 verwendet werden

Hier ist der Code:

$json_string = 'http://www.example.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);

  • Es hätte funktioniert, wenn du mit zugegriffen hättest $ob->Result stattdessen.

    – Lappen

    26. April 2018 um 7:56 Uhr

Benutzeravatar von Stephen
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);

  • Es stellt sich die Frage, was sind die Vorteile, wenn es als Array und nicht als Objekt zurückgegeben wird?

    – Foxinni

    16. August 2012 um 13:31 Uhr

  • Es wirft die Frage auf. „Eine Frage stellen“ bedeutet, etwas anzunehmen, das noch zu beweisen ist (Ref). In beiden Fällen könnte der Vorteil darin bestehen, dass das OP komfortabler ist, Arrays als Objekte zu durchlaufen, oder dass ein anderer, bereits implementierter Code ein Array erfordert.

    – Jamesnotjim

    6. März 2013 um 15:31 Uhr


  • @jamesnotjim Die Standardimplementierung, die ein Objekt zurückgibt, könnte die Frage aufwerfen, dass Objekte bessere Rückgabewerte als Arrays sind, oder nicht?

    – David Mann

    13. November 2013 um 2:43 Uhr

  • In der Tat könnte es @DavidMann. Touché!

    – Jamesnotjim

    13. November 2013 um 18:53 Uhr

  • Ich würde den Kommentar hinzufügen (wenn auch Jahre später), dass es keine Möglichkeit gibt, dass JSON etwas anderes als Daten enthält, was dies zu einer verwirrenden „Standard“-Wahl macht.

    – Barri

    25. Juli 2016 um 16:13 Uhr

Benutzeravatar von xkeshav
xkeshav

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 NULLwas 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_decodeWenn Sie Millionen großer Arrays gleichzeitig verwenden, kann die Leistung in diesem Fall, wie @TCB13 betont, negativ beeinflusst werden.

Nur für den Fall, dass Sie mit PHP kleiner als 5.2 arbeiten, können Sie diese Ressource verwenden.

http://techblog.willshouse.com/2009/06/12/using-json_encode-and-json_decode-in-php4/

http://mike.teczno.com/JSON/JSON.phps

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)
}

Benutzeravatar von coreyavis
Coreyavis

Dadurch wird es auch in ein Array umgewandelt:

<?php
    print_r((array) json_decode($object));
?>

Benutzeravatar von Avinash Singh
Avinash Singh

json_decode($data, true); // Returns data in array format 

json_decode($data); // Returns collections 

Wenn Sie also ein Array möchten, können Sie das zweite Argument als “true” übergeben json_decode Funktion.

1449570cookie-checkVerwenden Sie json_decode(), um ein Array anstelle eines Objekts zu erstellen

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

Privacy policy