json_decode zum Array

422

Ich versuche, eine JSON-Zeichenfolge in ein Array zu dekodieren, erhalte jedoch den folgenden Fehler.

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']);
?>
Harsha MV
quelle
1
Es hätte funktioniert, wenn Sie $ob->Resultstattdessen mit zugegriffen hätten .
Lapin

Antworten:

839

Gemäß der Dokumentation müssen Sie angeben, ob Sie ein assoziatives Array anstelle eines Objekts von json_decodemöchten. Dies wäre der Code:

json_decode($jsondata, true);
Stephen
quelle
4
Es stellt sich die Frage, welche Vorteile es hat, wenn es als Array und nicht als Objekt zurückgegeben wird.
Foxinni
52
Es wirft die Frage auf. "Eine Frage stellen" bedeutet, etwas anzunehmen, das noch bewiesen werden muss ( ref ). In beiden Fällen kann der Vorteil darin bestehen, dass das OP das Durchlaufen von Arrays komfortabler ist als Objekte, oder dass ein anderer, bereits implementierter Code ein Array erfordert.
Jamesnotjim
8
@jamesnotjim Die Standardimplementierung, die ein Objekt zurückgibt, könnte die Frage aufwerfen, ob Objekte bessere Rückgabewerte als Arrays sind, nicht wahr?
David Mann
7
In der Tat könnte es @DavidMann. Touché!
Jamesnotjim
8
Ich möchte 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.
Barry
45

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);
diEcho
quelle
27

Dies ist ein verspäteter Beitrag, aber es gibt einen gültigen Fall für das Casting json_decodemit (array).
Folgendes berücksichtigen:

$jsondata = '';
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
    echo $v; // etc.
}

Wenn $jsondatajemals eine leere Zeichenfolge zurückgegeben wird (wie es meiner Erfahrung nach häufig der Fall ist), json_decodewird zurückgegeben NULL, was zu dem Fehler führt. Warnung: Ungültiges Argument für foreach () in Zeile 3 . Sie könnten eine Zeile mit if / then-Code oder einen ternären Operator hinzufügen, aber IMO ist es sauberer, Zeile 2 einfach in ... zu ändern.

$arr = (array) json_decode($jsondata,true);

... es sei denn, Sie verwenden json_decodeMillionen großer Arrays gleichzeitig. In diesem Fall kann die Leistung beeinträchtigt werden, wie @ TCB13 hervorhebt.

neokio
quelle
6

Laut der PHP-Dokumentation hat die json_decode Funktion einen Parameter namens assoc, der die zurückgegebenen Objekte in assoziative Arrays konvertiert

 mixed json_decode ( string $json [, bool $assoc = FALSE ] )

Da der Parameter assocFALSE standardmäßig aktiviert ist , müssen Sie diesen Wert auf festlegenTRUE um ein Array abzurufen.

Untersuchen Sie den folgenden Code für eine Beispielimplikation:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));

welche Ausgänge:

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)
}
Arosha De Silva
quelle
5

Dies ändert es auch in ein Array:

<?php
    print_r((array) json_decode($object));
?>
Coreyavis
quelle
6
Dies ist eine Verschwendung von CPU / Speicher, wie vorgeschlagen json_decode($object, true);das truetut genau das gleiche, intern viel schneller.
TCB13
1
@ TCB13, außer wenn Sie beide benötigen und nicht erneut decodieren möchten
Jimmy Kane
3
Stimmen Sie mit @JimmyKane überein. Ich habe versucht, beide Versionen in einem Zyklus auszuführen. Wenn Sie sowohl Objekt als auch Array benötigen (obwohl dies selten vorkommen sollte?), ist json_decode+ Casting 45% schneller als das Ausführen beider Varianten von json_decode. Auf der anderen Seite sind beide so schnell, dass der Unterschied vernachlässigbar ist , wenn Sie nicht buchstäblich Tausende von Dekodierungen benötigen .
LSerni
4

json_decodeunterstütze das zweite Argument, wenn es auf gesetzt ist, TRUEwird ein Arraystatt zurückgegeben stdClass Object. Überprüfen Sie die Handbuchseite vonjson_decode Funktion alle unterstützten Argumente und seine Details zu sehen.

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!
Arjun Kariyadan
quelle
3
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 in der json_decodeFunktion als 'true' übergeben .

Shanu Singh
quelle
3

ich hoffe, dies wird dir helfen

$json_ps = '{"courseList":[  
            {"course":"1", "course_data1":"Computer Systems(Networks)"},  
            {"course":"2", "course_data2":"Audio and Music Technology"},  
            {"course":"3", "course_data3":"MBA Digital Marketing"}  
        ]}';

Verwenden Sie die Json-Dekodierungsfunktion

$json_pss = json_decode($json_ps, true);

Schleife über JSON-Array in PHP

foreach($json_pss['courseList'] as $pss_json)
{

    echo '<br>' .$course_data1 = $pss_json['course_data1']; exit; 

}

Ergebnis : Computersysteme (Netzwerke)

TechyFlick
quelle
2

in PHP json_decode konvertiere json Daten in PHP assoziiertes Array
Zum Beispiel:$php-array= json_decode($json-data, true); print_r($php-array);

Salman Mohammad
quelle
2

Bitte versuchen Sie dies

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, true);
echo "<pre>"; print_r($obj['Result']);
?>
Dipali Sakle Systematix
quelle
2

Versuchen Sie es wie folgt:

$json_string = 'https://example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj->Result);
foreach($obj->Result as $value){
  echo $value->id; //change accordingly
}
lalithkumar
quelle