Apabila kami menggunakan PHP untuk menukar daripada rentetan bersiri JSON kepada tatasusunan, kadangkala kami menghadapi beberapa masalah. Salah satu masalah yang paling biasa ialah kehilangan kunci dalam tatasusunan yang ditukar.
Sebagai contoh, kami menggunakan kod berikut untuk mendapatkan data daripada rentetan JSON:
$json_str = '{"name":"John","age":30,"city":"New York"}'; $data = json_decode($json_str, true);
Kod ini sebenarnya sangat mudah, ia adalah untuk menukar rentetan JSON kepada tatasusunan bersekutu. Walau bagaimanapun, kadangkala tatasusunan yang ditukar tidak mempunyai nilai kunci yang betul. Ini mungkin disebabkan oleh rentetan JSON yang mengandungi beberapa aksara yang tidak kelihatan atau struktur yang tidak teratur.
Yang berikut memperkenalkan beberapa masalah yang mungkin menyebabkan nilai utama hilang selepas penukaran dan memberikan penyelesaian yang sepadan.
Masalah 1: Rentetan JSON mengandungi aksara yang tidak kelihatan
Kadangkala, rentetan JSON mengandungi beberapa aksara yang tidak kelihatan, seperti ruang atau baris baharu. Aksara ini mungkin kelihatan tidak berbahaya, tetapi boleh menyebabkan penghurai JSON gagal menghuraikan dengan betul. Ini akan menyebabkan penukaran daripada rentetan JSON kepada tatasusunan gagal.
Penyelesaian:
Anda boleh cuba menggunakan fungsi trim() PHP untuk mengalih keluar aksara yang tidak kelihatan daripada rentetan. Contohnya:
// 移除 JSON 字符串中的不可见字符 $json_str = trim($json_str); // 将 JSON 字符串转换为关联数组 $data = json_decode($json_str, true);
Masalah 2: Nama kunci dalam rentetan JSON tidak mematuhi spesifikasi nama pembolehubah PHP
Nama kunci dalam JSON boleh mengandungi pelbagai aksara, bukan sahaja huruf dan nombor. Walau bagaimanapun, dalam PHP, nama pembolehubah mesti mengikut konvensyen penamaan tertentu. Jika nama kunci dalam JSON tidak mematuhi spesifikasi ini, penghurai JSON tidak akan menghuraikan nama kunci dengan betul dan penukaran daripada rentetan JSON kepada tatasusunan akan gagal.
Penyelesaian:
Jika anda tidak mempunyai kawalan ke atas rentetan JSON yang masuk, anda boleh cuba menetapkan pilihan tatasusunan bersekutu PHP kepada palsu. Ini akan menyebabkan penghurai JSON menghuraikan objek dalam JSON sebagai objek standard dan bukannya tatasusunan bersekutu. Contohnya:
// 将 JSON 字符串转换为标准对象 $data = json_decode($json_str, false);
Masalah 3: Nama kunci dalam rentetan JSON diduplikasi dengan nama kunci lain
Nama kunci dalam JSON mestilah unik. Jika dua atau lebih kunci dalam rentetan JSON mempunyai nama yang sama, penghurai tidak akan dapat membezakan antara mereka. Ini akan menyebabkan penukaran daripada rentetan JSON kepada tatasusunan gagal.
Penyelesaian:
Jika anda tidak dapat mengubah suai rentetan JSON yang masuk, cuba tetapkan pilihan JSON_BIGINT_AS_STRING PHP kepada benar. Ini akan memaksa penghurai JSON untuk menghuraikan semua nombor dalam JSON sebagai rentetan. Contohnya:
// 将 JSON 字符串中的数字解析为字符串 $data = json_decode($json_str, true, 512, JSON_BIGINT_AS_STRING);
Masalah 4: JSON mengandungi struktur haram
Format JSON mempunyai had dan kekangannya. Jika rentetan JSON tidak mematuhi had dan kekangan ini, penghurai tidak akan dapat menghuraikan rentetan dengan betul dan penukaran daripada rentetan JSON kepada tatasusunan akan gagal.
Penyelesaian:
Jika anda tidak mempunyai kawalan ke atas rentetan JSON yang masuk, anda perlu memastikan ia mematuhi spesifikasi JSON. Jika tidak, anda perlu membetulkan ralat dalam rentetan JSON.
Akhir sekali, berikut ialah beberapa penyelesaian tambahan:
Ringkasan:
Apabila rentetan JSON tidak boleh ditukar daripada JSON kepada tatasusunan dengan betul, terdapat banyak penyelesaian yang boleh anda fikirkan. Sama ada cara, anda perlu memahami ciri dan had JSON untuk dapat mengenal pasti dan membetulkan ralat yang mungkin berlaku. Mari kita bekerjasama untuk menyelesaikan masalah ini secepat mungkin!
Atas ialah kandungan terperinci Penyelesaian kepada masalah tidak mendapat nilai kunci dari json ke array php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!