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

Mengapakah `json_encode` Menukar Tatasusunan Jarang kepada Objek JSON?

Susan Sarandon
Susan Sarandonasal
2024-11-25 08:55:12843semak imbas

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

Memahami Pengekodan JSON bagi Tatasusunan Jarang

Dalam pengekodan JSON, tatasusunan jarang (tatasusunan dengan nilai indeks yang tiada) ialah anomali. Ini kerana sintaks tatasusunan JSON tidak menyokong indeks, menjadikannya mustahil untuk mewakili tatasusunan sedemikian secara langsung.

Soalan:

Mengapa json_encode mengekod tatasusunan jarang sebagai JSON objek bukannya an tatasusunan?

Jawapan:

Gelagat json_encode dengan tatasusunan jarang berpunca daripada ketidakupayaan JSON untuk menyatakan tatasusunan sedemikian. Apabila json_encode menemui tatasusunan yang jarang, ia menggunakan pengekodannya sebagai objek JSON untuk mengekalkan pasangan nilai kunci tatasusunan.

Contoh:

Pertimbangkan PHP kod:

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

echo json_encode($a) . "\n";
unset($a[1]);
echo json_encode($a) . "\n";

Output:

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

Penjelasan:

  • Dalam pengekodan pertama, tatasusunan jarang diwakili sebagai tatasusunan JSON yang sah dengan tiga objek.
  • Selepas menyahsetkan indeks 1, tatasusunan jarang mengandungi lubang, yang memaksa json_encode menukarnya kepada objek JSON untuk mengekalkan perkaitan antara kunci dan nilai.

Penyelesaian:

Untuk mengelakkan pengekodan tatasusunan jarang sebagai objek, anda boleh menggunakan array_values($a) untuk mendapatkan tatasusunan diindeks semula tanpa sebarang lubang. json_encode kemudiannya akan mengekod ini dengan betul sebagai tatasusunan JSON.

Atas ialah kandungan terperinci Mengapakah `json_encode` Menukar Tatasusunan 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