Perhatikan skrip kecil ini:
$array = array('stuff' => 'things');
print_r($array);
//prints - Array ( [stuff] => things )
$arrayEncoded = json_encode($array);
echo $arrayEncoded . "<br />";
//prints - {"stuff":"things"}
$arrayDecoded = json_decode($arrayEncoded);
print_r($arrayDecoded);
//prints - stdClass Object ( [stuff] => things )
Mengapa PHP mengubah Objek JSON menjadi kelas?
Seharusnya tidak array yang json_encoded
kemudian json_decoded
menghasilkan hasil yang sama EXACT?
memberi Anda sebuah array.
sumber
Untuk menjawab pertanyaan sebenarnya:
Lihatlah lebih dekat pada output dari JSON yang dikodekan, saya telah memperpanjang contoh yang diberikan OP sedikit:
Format JSON diturunkan dari standar yang sama dengan JavaScript ( Standar Bahasa Pemrograman ECMAScript ) dan jika Anda akan melihat formatnya seperti JavaScript. Ini adalah objek JSON (
{}
= objek ) yang memiliki properti "barang" dengan nilai "hal" dan memiliki properti "benda" dengan nilainya berupa array string ([]
= array ).JSON (sebagai JavaScript) tidak mengenal array asosiatif hanya array yang diindeks. Jadi, ketika JSON mengenkode array asosiatif PHP, ini akan menghasilkan string JSON yang berisi array ini sebagai "objek".
Sekarang kami mendekode JSON lagi menggunakan
json_decode($arrayEncoded)
. Fungsi decode tidak tahu dari mana string JSON ini berasal (array PHP) sehingga decoding menjadi objek yang tidak diketahui, yaitustdClass
dalam PHP. Seperti yang akan Anda lihat, larik string "things" AKAN didekode menjadi larik PHP terindeks.Lihat juga:
Terima kasih kepada https://www.randomlists.com/things untuk 'hal-hal'
sumber
Meskipun, seperti yang disebutkan, Anda dapat menambahkan parameter kedua di sini untuk menunjukkan bahwa Anda menginginkan sebuah array dikembalikan:
Banyak orang mungkin lebih suka memberikan hasil sebagai gantinya:
Mungkin lebih jelas untuk dibaca.
sumber
tl; dr: JavaScript tidak mendukung array asosiatif, oleh karena itu JSON juga tidak.
Bagaimanapun, ini JSON, bukan JSAAN. :)
Jadi PHP harus mengubah array Anda menjadi objek untuk dikodekan menjadi JSON.
sumber
Jika Anda mendekode json ke dalam array, informasi akan hilang dalam situasi ini.
sumber
Ada juga pustaka encode / decode PHP 4 json yang bagus (bahkan kompatibel dengan PHP 5 terbalik) yang ditulis dalam posting blog ini: Menggunakan json_encode () dan json_decode () di PHP4 (Jun 2009) .
Kode konkretnya dibuat oleh Michal Migurski dan oleh Matt Knapp:
sumber