json_decode ke array


422

Saya mencoba untuk memecahkan kode string JSON menjadi array tetapi saya mendapatkan kesalahan berikut.

Kesalahan fatal: Tidak dapat menggunakan objek tipe stdClass sebagai array di C: \ wamp \ www \ temp \ asklaila.php pada baris 6

Ini kodenya:

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

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

1
Ini akan bekerja jika Anda mengaksesnya $ob->Result.
Lapin

Jawaban:


839

Sesuai dokumentasi , Anda perlu menentukan apakah Anda menginginkan array asosiatif alih-alih objek json_decode, ini akan menjadi kode:

json_decode($jsondata, true);

4
Itu menimbulkan pertanyaan, apa keuntungan dari mengembalikannya sebagai array dan bukan objek?
Foxinni

52
Itu menimbulkan pertanyaan. "Mengemis pertanyaan" berarti mengasumsikan sesuatu yang masih harus dibuktikan ( ref ). Dalam kedua kasus, keuntungannya mungkin bahwa OP lebih nyaman melintasi array daripada objek, atau bahwa beberapa kode lain yang sudah diimplementasikan memerlukan array.
jamesnotjim

8
@jamesnotjim Implementasi default yang mengembalikan suatu objek dapat menimbulkan pertanyaan bahwa objek adalah nilai pengembalian yang lebih baik daripada array, bukan?
David Mann

7
Memang bisa @DavidMann. Sentuh!
jamesnotjim

8
Saya akan menambahkan komentar (walaupun bertahun-tahun kemudian) bahwa tidak ada kemungkinan JSON berisi apa pun kecuali data yang menjadikan ini pilihan "default" yang membingungkan.
Barry

45

coba ini

$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);

27

Ini adalah kontribusi terlambat, tetapi ada kasus yang valid untuk casting json_decodebersama (array).
Pertimbangkan yang berikut ini:

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

Jika $jsondatapernah dikembalikan sebagai string kosong (seperti dalam pengalaman saya sering), json_decodeakan kembali NULL, menghasilkan kesalahan Peringatan: Argumen tidak valid disediakan untuk foreach () pada baris 3 . Anda dapat menambahkan satu baris kode if / then atau operator ternary, tetapi IMO lebih bersih untuk hanya mengubah baris 2 menjadi ...

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

... kecuali jika Anda json_decodememasukkan jutaan array besar sekaligus, dalam hal ini seperti yang ditunjukkan oleh TCB13, kinerja dapat dipengaruhi secara negatif.



6

Menurut fungsi Dokumentasi PHP json_decode memiliki parameter bernama assoc yang mengubah objek yang dikembalikan menjadi array asosiatif

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

Karena parameter assocFALSE secara default, Anda harus mengatur nilai ini TRUEuntuk mengambil array.

Periksa kode di bawah ini untuk contoh implikasi:

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

yang keluaran:

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

5

Ini juga akan mengubahnya menjadi array:

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

6
Ini buang-buang CPU / Memory, seperti yang disarankan json_decode($object, true);para truetidak persis sama, secara internal jauh lebih cepat.
TCB13

1
@ TCB13 kecuali jika Anda membutuhkan keduanya dan tidak ingin menjalankan decode lagi
Jimmy Kane

3
Setuju dengan @JimmyKane. Saya mencoba dan menjalankan kedua versi dalam satu siklus; jika Anda membutuhkan objek dan array (meskipun ini jarang terjadi?), json_decode+ casting lebih cepat 45% daripada menjalankan kedua rasa json_decode. Di sisi lain, keduanya sangat cepat sehingga kecuali Anda benar-benar membutuhkan ribuan decodings, perbedaannya dapat diabaikan.
LSerni

4

json_decodemendukung argumen kedua, ketika diatur ke TRUEitu akan mengembalikan Arraybukan stdClass Object. Periksa halaman fungsi Manualjson_decode untuk melihat semua argumen yang didukung dan detailnya.

Sebagai contoh coba ini:

$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!

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

json_decode($data); // Returns collections 

Jadi, Jika menginginkan sebuah array, Anda dapat melewati argumen kedua sebagai json_decodefungsi 'true' .


3

Saya harap ini akan membantu Anda

$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"}  
        ]}';

Gunakan fungsi dekode Json

$json_pss = json_decode($json_ps, true);

Looping over JSON array dalam php

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

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

}

Hasil : Sistem Komputer (Jaringan)


2

di PHP json_decode, konversikan data json ke dalam array terkait PHP
Sebagai contoh:$php-array= json_decode($json-data, true); print_r($php-array);


2

Silakan coba ini

<?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']);
?>

2

Coba seperti ini:

$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
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.