Apabila kami menggunakan json_encode() dalam PHP untuk menukar tatasusunan kepada rentetan JSON, kadangkala kami menghadapi masalah Tidak kira bagaimana kami beroperasi, rentetan JSON yang ditukar akan kosong. Masalah ini boleh mengecewakan, tetapi penyelesaiannya mudah.
Mencari masalah
Pertama, kita perlu mencari masalahnya. Kita boleh menggunakan fungsi var_dump() untuk melihat kandungan tatasusunan dan menyemak sama ada terdapat sebarang pengecualian atau data yang dijangkakan.
Contohnya:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); var_dump($arr); echo json_encode($arr); ?>
Kod ini akan mengeluarkan yang berikut:
array(3) { ["name"]=> string(4) "John" ["age"]=> int(30) ["city"]=> string(8) "New York" }
Kemudian, kami cuba menggunakan json_encode() untuk menukar tatasusunan kepada aksara JSON rentetan. Akibatnya, apa yang kita dapat ialah rentetan kosong. Keputusan ini mengejutkan kami dan membuatkan kami mempersoalkan tahap kemahiran kami sendiri.
Menyelesaikan masalah
Seterusnya, mari selesaikan masalah itu langkah demi langkah.
Fungsi json_encode() PHP memerlukan data input mestilah dikodkan UTF-8. Jika terdapat aksara bukan berkod UTF-8 dalam tatasusunan, penukaran kepada rentetan JSON akan gagal.
Anda boleh menukar rentetan dalam tatasusunan kepada pengekodan UTF-8 melalui fungsi iconv() atau mb_convert_encoding(). Contohnya:
<?php $arr = array("name" => "John", "age" => 30, "city" => "New York"); foreach($arr as &$value){ $value = mb_convert_encoding($value, 'UTF-8', 'auto'); } echo json_encode($arr); ?>
Spesifikasi JSON tidak membenarkan nilai nol. Oleh itu, jika tatasusunan mengandungi nilai null, menggunakan json_encode() akan menyebabkan penukaran gagal dan mengembalikan null.
Pada ketika ini, anda boleh menggunakan fungsi array_map() untuk menggantikan nilai nol dalam tatasusunan dengan rentetan kosong. Contohnya:
<?php $arr = array("name" => "John", "age" => null, "city" => "New York"); $arr = array_map(function($value){ return $value !== null ? $value : ''; },$arr); echo json_encode($arr); ?>
Nama kunci JSON mestilah daripada jenis rentetan, yang bermaksud nama kunci dalam nama tatasusunan mestilah rentetan. Jika anda menggunakan nombor sebagai kunci, anda akan menghadapi masalah menggunakan fungsi json_encode().
Dalam contoh berikut, apabila kita menggunakan fungsi json_encode(), hasilnya ialah rentetan kosong:
<?php $arr = array(0=>'apple',1=>'banana',2=>'orange'); echo json_encode($arr); ?>
Pada masa ini, anda perlu menukar nama kunci angka kepada jenis rentetan aksara. Contohnya:
<?php $arr = array('0'=>'apple','1'=>'banana','2'=>'orange'); echo json_encode($arr); ?>
Jika terdapat rujukan gelung tak terhingga dalam tatasusunan, ia akan menyebabkan json_encode () berfungsi untuk tidak dapat memproses tatasusunan, dan mengembalikan rentetan kosong. Jika tatasusunan anda mempunyai hubungan rujukan kendiri yang bersarang di dalamnya, anda pasti akan menemui masalah ini apabila menggunakan json_encode().
Semasa menyelesaikan masalah ini, anda perlu memastikan tatasusunan anda boleh bersiri. Iaitu, anda harus menggantikan semua rujukan objek dengan jenis data boleh bersiri. Contohnya:
<?php $arr = array(); $item1 = array('id'=>1,'name'=>'apple'); $item2 = array('id'=>2,'name'=>'banana'); $item1['next'] = &$item2; $item2['prev'] = &$item1; $item3 = array('id'=>3,'data'=>array_merge($item1,$item2)); $arr[] = $item1; $arr[] = $item2; $arr[] = $item3['data']; echo json_encode($arr); ?>
Dalam contoh ini, kami mencipta tatasusunan yang mengandungi perhubungan rujukan kendiri. Untuk menyelesaikan masalah, kami menukar rujukan objek kepada jenis data boleh bersiri, yang mengelakkan masalah kitaran rujukan tak terhingga dan membolehkan kami berjaya menukar tatasusunan kepada rentetan JSON.
Ringkasan
Jangan panik apabila anda menemui rentetan JSON kosong apabila menggunakan json_encode() dalam PHP. Dengan mengikuti empat kaedah di atas, anda boleh menyelesaikan masalah ini dengan mudah. Sila pastikan tatasusunan dikodkan UTF-8, tatasusunan tidak mengandungi nilai nol, nama kunci dalam tatasusunan adalah sah dan tiada rujukan bulat tak terhingga dalam tatasusunan Anda boleh menggunakan json_encode(. ) untuk menukar Array anda berjaya ditukar kepada rentetan JSON.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah apabila menukar tatasusunan php ke format json kosong. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!