Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `json_encode` Menukar Tatasusunan PHP Jarang kepada Objek JSON?

Mengapakah `json_encode` Menukar Tatasusunan PHP Jarang kepada Objek JSON?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-21 07:53:08693semak imbas

Why Does `json_encode` Convert Sparse PHP Arrays to JSON Objects?

Tasusunan Jarang Dikodkan sebagai Objek JSON dalam json_encode

Apabila tatasusunan mengandungi indeks yang tiada, ia dikenali sebagai tatasusunan jarang. json_encode, secara lalai, mengendalikan tatasusunan jarang sebagai objek JSON dan bukannya tatasusunan. Ini boleh membawa kepada tingkah laku yang tidak dijangka dalam pelbagai senario.

Punca Penukaran Tatasusunan ke Objek

Sintaks JSON tidak menyokong tatasusunan dengan indeks yang tiada. Apabila json_encode menemui tatasusunan jarang, ia menganggap ia sebagai objek dan menukarnya dengan sewajarnya.

Contoh

Pertimbangkan perkara berikut kod:

$a = array(
    new stdClass,
    new stdClass,
    new stdClass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

// First JSON encoding
echo json_encode($a) . "\n";

// Unset an element
unset($a[1]);

// Second JSON encoding
echo json_encode($a) . "\n";

Output

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}

Dalam pengekodan pertama, tatasusunan ditukar kepada tatasusunan JSON seperti yang dijangkakan. Walau bagaimanapun, selepas menyahset indeks 1, pengekodan kedua menghasilkan objek JSON disebabkan isu tatasusunan yang jarang berlaku.

Pencegahan

Untuk menghalang tingkah laku ini dan memastikan pengekodan tatasusunan yang konsisten , anda boleh menggunakan array_values() untuk mengindeks semula tatasusunan sebelum menghantarnya ke json_encode. Ini akan mengalih keluar sebarang lubang dalam tatasusunan dan memastikan ia dianggap sebagai tatasusunan oleh json_encode.

Kod Diubahsuai

echo json_encode(array_values($a)) . "\n";

Kod yang diubah suai ini akan sentiasa mengekod $a sebagai tatasusunan JSON, tidak kira sama ada ia mempunyai indeks yang hilang atau tidak.

Atas ialah kandungan terperinci Mengapakah `json_encode` Menukar Tatasusunan PHP Jarang kepada Objek JSON?. 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