Rumah > pembangunan bahagian belakang > masalah PHP > Penyelesaian kepada masalah tidak mendapat nilai kunci dari json ke array php

Penyelesaian kepada masalah tidak mendapat nilai kunci dari json ke array php

PHPz
Lepaskan: 2023-04-18 13:56:31
asal
714 orang telah melayarinya

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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:

  • Pastikan rentetan JSON ialah rentetan UTF-8 yang sah.
  • Jika anda menggunakan versi PHP yang lebih rendah daripada 5.4, anda perlu memasang sambungan JSON.
  • Cuba gunakan fungsi stripslashes() PHP sebelum menghantarnya ke dalam fungsi json_decode().

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan