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

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

Mary-Kate Olsen
Lepaskan: 2024-11-21 07:53:08
asal
726 orang telah melayarinya

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

Output

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
Salin selepas log masuk

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan