Penyebab Utama JSONDecodeError
json.decoder.JSONDecodeError dalam Python terjadi ketika fungsi json.loads() atau json.load() mencoba memproses string atau file yang tidak memenuhi standar format JSON (RFC 8259). Kesalahan ini muncul karena sintaks yang tidak valid, seperti penggunaan tanda kutip tunggal, koma tambahan (trailing comma), atau karakter kontrol yang tidak ter-escape dengan benar.
Tabel Analisis Penyebab Umum
| Penyebab | Deskripsi | Contoh Kesalahan |
|---|---|---|
| Tanda Kutip | JSON mewajibkan tanda kutip ganda (") | {'key': 'value'} |
| Trailing Comma | Koma di akhir elemen terakhir tidak diizinkan | {"a": 1, "b": 2,} |
| Komentar | JSON tidak mendukung komentar | {"a": 1} // komentar |
| Encoding | File tidak menggunakan UTF-8 | File dengan BOM atau Latin-1 |
Langkah Perbaikan Teknis
Untuk mengatasi error ini, Anda perlu melakukan validasi data sebelum proses parsing. Berikut adalah implementasi kode untuk menangani error secara elegan:
import json
def parse_json_safe(data):
try:
return json.loads(data)
except json.JSONDecodeError as e:
print(f"Error terdeteksi: {e.msg}")
print(f"Posisi error: baris {e.lineno}, kolom {e.colno}")
return None
# Contoh penggunaan
raw_data = '{"nama": "Azwinn",}' # Mengandung trailing comma
result = parse_json_safe(raw_data)Tips Troubleshooting Lapangan
- Validasi Visual: Gunakan alat seperti JSONLint untuk memverifikasi struktur file secara instan.
- Cek Encoding: Jika membaca file dari sistem operasi berbeda, pastikan menggunakan
encoding='utf-8'saat membuka file:open('file.json', 'r', encoding='utf-8'). - Pembersihan Data: Jika data berasal dari API yang tidak stabil, gunakan pustaka
dirtyjsonataujson5untuk menangani format yang sedikit longgar. - Logging: Selalu log isi data mentah (raw data) tepat sebelum fungsi
json.loads()dipanggil untuk melihat apakah ada karakter tersembunyi atau potongan data yang tidak lengkap.
Analisis Struktur JSON yang Valid
JSON yang valid harus mengikuti aturan ketat: objek dimulai dengan kurung kurawal {}, array dengan kurung siku [], dan kunci (key) harus berupa string yang diapit tanda kutip ganda. Nilai dapat berupa string, angka, objek, array, boolean (true/false), atau null. Jika Anda menemukan error, periksa apakah data Anda mengandung karakter kontrol seperti \n atau \t yang tidak di-escape dengan benar di dalam string.