Kesalahan JSON di balik sebagian besar error parse, dan cara memperbaikinya
Sebagian besar error parse JSON berasal dari daftar kesalahan yang pendek: koma di akhir, string dengan tanda kutip tunggal, komentar, kunci tanpa tanda kutip, nilai seperti NaN atau undefined, atau tanda kutip melengkung yang tersalin dari dokumen. JSON lebih ketat daripada JavaScript yang mirip dengannya, sehingga kode yang tampak benar bagi manusia bisa ditolak oleh parser. Pesan error menunjukkan baris dan kolom, dan perbaikannya biasanya ada di posisi itu atau sedikit sebelumnya.
Pemformat JSONJSON tidak bisa diuraiPakai gratisAturan yang diterapkan JSON
Dokumen JSON adalah satu nilai: objek dalam kurung kurawal, array dalam kurung siku, string, angka, true, false atau null. Di dalam nilai-nilai tersebut:
- Setiap kunci dan setiap string memakai tanda kutip ganda lurus, misalnya "name".
- Koma memisahkan item, dan tidak boleh ada koma setelah item terakhir dalam objek atau array.
- Angka tidak boleh diawali tanda plus, dan NaN, Infinity serta undefined bukan angka atau nilai yang valid.
- Komentar sama sekali tidak diizinkan.
- Kunci harus berupa string, sehingga kunci tanpa tanda kutip seperti name: tidak valid.
Beberapa parser menerima sebagian aturan ini secara default, dan beberapa alat menerima JSON dengan komentar sebagai kemudahan. Kelonggaran itu menyembunyikan masalah sampai file mencapai pembaca yang lebih ketat, jadi tulislah dalam bentuk yang ketat.
Membaca pesan error
Parser melaporkan tempat pertama tempat ia tidak bisa melanjutkan. Pesan itu menyebutkan masalahnya dan memberikan posisi, biasanya baris dan kolom. Berikut file kecil dengan koma di akhir pada array dan satu lagi setelah properti terakhir:
{
"name": "Ada",
"tags": ["a", "b",],
}
Python melaporkan ini sebagai "Illegal trailing comma before end of array: line 3 column 20". Redaksinya berbeda antaralat, dan beberapa parser lama hanya menulis "Unexpected token" dengan offset karakter. Buka posisi yang dilaporkan, lalu lihat karakter tepat sebelumnya. Kesalahan yang sebenarnya sering berupa koma, tanda kutip atau kurung kurawal satu atau dua karakter sebelum posisi yang dilaporkan.
Beberapa pesan lain dari parser Python, dan arti umumnya:
- "Expecting property name enclosed in double quotes" untuk '{'a': 1}' berarti kunci memakai tanda kutip tunggal atau tanpa tanda kutip.
- "Expecting value" pada posisi yang seharusnya berupa angka atau string sering berarti tanda kutip melengkung, karena parser menganggapnya sebagai karakter tak dikenal.
- "Expecting ',' delimiter" biasanya berarti koma antara dua item hilang, atau ada komentar di tengah data.
Tanda kutip melengkung dan teks yang tersalin
Tanda kutip melengkung adalah kasus yang paling membingungkan, karena tampilannya hampir sama dengan tanda kutip lurus. File JSON yang disalin dari pengolah kata, halaman web, atau pesan obrolan bisa berisi tanda kutip ganda melengkung. File itu tampak benar bagi Anda tetapi gagal diurai, karena parser melihat “x” sebagai karakter tak dikenal, bukan pembatas string.
Karakter tersembunyi menyebabkan kegagalan serupa. Spasi tak terpisahkan (non-breaking space) di antara dua nilai bukan spasi bagi parser. Hapus karakter tersembunyi sebelum Anda mencoba memperbaiki struktur secara manual, lalu perbaiki tanda kutipnya. Panduan tanda kutip melengkung menjelaskan cara meluruskannya dengan aman.
Tanda kutip tunggal, komentar dan kunci tanpa tanda kutip
Banyak pengembang menulis data mirip JSON dalam bahasa yang mengizinkan lebih banyak hal:
- Tanda kutip tunggal sah dalam literal JavaScript dan Python, tetapi JSON mewajibkan tanda kutip ganda. Ganti {'a': 1} menjadi {"a": 1}.
- Komentar seperti
//atau/* */harus dihapus. Jika Anda perlu catatan, letakkan di kolom terpisah, atau gunakan format yang dirancang untuk file konfigurasi. - Kunci tanpa tanda kutip umum ditemukan dalam literal objek JavaScript. Tambahkan tanda kutipnya.
- NaN dan undefined bukan JSON. Gunakan null untuk nilai yang hilang, atau string jika nilainya berupa teks.
Hati-hati dengan cari dan ganti secara menyeluruh. Mengubah setiap tanda kutip tunggal menjadi tanda kutip ganda akan merusak string yang mengandung apostrof, seperti "Ada's notes". Pratinjau setiap hasil di Cari dan ganti teks terlebih dahulu, agar Anda bisa melihat tanda kutip mana yang akan berubah.
Perbaiki struktur langkah demi langkah
- Tempel file ke Pemformat JSON. Memformatnya membuat struktur terlihat, dan error menampilkan baris serta kolomnya. Lalu tekan Perbaiki, yang menghapus komentar dan koma di akhir. Tombol ini tidak mengubah tanda kutip tunggal atau tanda kutip melengkung, jadi perbaiki bagian itu sendiri.
- Perbaiki hanya error pertama, lalu periksa ulang. Satu kesalahan bisa memunculkan beberapa error di bagian bawah.
- Pastikan setiap kurung kurawal atau kurung siku pembuka memiliki penutup, dan bahwa susunannya sesuai dengan maksud Anda.
- Validasi file akhir dengan parser yang digunakan aplikasi Anda, bukan hanya dengan alat web. Parser sedikit berbeda satu sama lain.
File yang bisa diurai belum tentu file yang Anda maksud. Periksa terhadap JSON Schema untuk menemukan kolom yang hilang atau nilai dengan tipe yang salah, atau bandingkan dua dokumen JSON untuk melihat apa yang berubah antarversi.
Kasus khusus
- Koma di akhir pada file yang dihasilkan. Beberapa alat menuliskannya. Jika Anda membuat JSON dengan menyusun string secara manual, gunakan serializer bahasa Anda, yang menghasilkan keluaran yang valid.
- Kunci ganda. JSON mengizinkannya, tetapi sebagian besar parser hanya menyimpan nilai terakhir. Kunci ganda adalah bug yang menunggu untuk terjadi.
- Angka besar. Bilangan bulat yang sangat besar bisa kehilangan presisi di beberapa parser, jadi simpan identifier sebagai string jika panjangnya melebihi yang bisa direpresentasikan parser secara tepat. Panduan CSV ke JSON menekankan hal yang sama tentang ID.
Jawaban singkat
Mengapa JSON saya gagal padahal kelihatannya benar?
Penyebab umumnya adalah koma di akhir, tanda kutip tunggal, komentar, atau tanda kutip melengkung yang tersalin dari dokumen. Periksa posisi dalam pesan error dan karakter tepat sebelumnya.
Bolehkah JSON memiliki komentar?
Tidak. Standar JSON tidak mengizinkan komentar. Hapus komentar tersebut, atau pindahkan catatan ke kolom tersendiri. Tombol Perbaiki pada pemformat akan menghapusnya untuk Anda.
Apa yang sebaiknya dipakai sebagai pengganti undefined dalam JSON?
Gunakan null ketika nilai memang sengaja tidak ada, atau hapus kuncinya sepenuhnya. undefined adalah nilai JavaScript dan tidak memiliki representasi dalam JSON.
Diterjemahkan dari Asli dalam bahasa Inggris dengan bantuan AI.
Komentar
Belum ada komentar. Jadilah yang pertama.


