Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah `json_encode` Kadangkala Mengembalikan Nombor sebagai Rentetan, dan Bagaimana Saya Boleh Menghalang Ini?

Mengapakah `json_encode` Kadangkala Mengembalikan Nombor sebagai Rentetan, dan Bagaimana Saya Boleh Menghalang Ini?

Linda Hamilton
Linda Hamiltonasal
2024-12-03 06:13:16750semak imbas

Why Does `json_encode` Sometimes Return Numbers as Strings, and How Can I Prevent This?

json_encode Strings vs. Numbers

Apabila menggunakan fungsi json_encode PHP, anda mungkin menghadapi masalah apabila nombor dikodkan sebagai rentetan. Ini boleh membawa kepada tingkah laku yang tidak dijangka apabila bekerja dengan JavaScript, kerana rentetan tidak boleh digunakan untuk operasi berangka.

Memahami Isu

Sebagai contoh, jika anda mempunyai tatasusunan seperti ini:

array('id' => 3)

json_encode akan mengeluarkan JSON berikut rentetan:

"{ ["id": "3", ...)

Perhatikan bahawa sifat id dibalut dengan petikan, menunjukkan nilai rentetan. Apabila JavaScript menemui rentetan ini, ia mentafsirkannya sedemikian dan sebarang pengiraan berangka yang dilakukan padanya akan gagal.

Mencegah Pengekodan Rentetan

Untuk menangani isu ini, anda boleh menggunakan bendera JSON_NUMERIC_CHECK apabila memanggil json_encode. Bendera ini mengarahkan PHP untuk menukar nombor secara automatik kepada nilai berangka sebelum pengekodan.

$arr = array( 'row_id' => 1, 'name' => 'George' );
echo json_encode( $arr, JSON_NUMERIC_CHECK );

Ini akan mengeluarkan:

{"row_id":1,"name":"George"}

Dengan bendera JSON_NUMERIC_CHECK, sifat row_id kini ialah nombor tulen, membolehkan anda melakukan operasi berangka padanya dalam JavaScript tanpa sebarang isu.

Atas ialah kandungan terperinci Mengapakah `json_encode` Kadangkala Mengembalikan Nombor sebagai Rentetan, dan Bagaimana Saya Boleh Menghalang Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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