Solusi JSONDecodeError Python: Penyebab dan Cara Memperbaikinya

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

PenyebabDeskripsiContoh Kesalahan
Tanda KutipJSON mewajibkan tanda kutip ganda ("){'key': 'value'}
Trailing CommaKoma di akhir elemen terakhir tidak diizinkan{"a": 1, "b": 2,}
KomentarJSON tidak mendukung komentar{"a": 1} // komentar
EncodingFile tidak menggunakan UTF-8File 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

  1. Validasi Visual: Gunakan alat seperti JSONLint untuk memverifikasi struktur file secara instan.
  2. Cek Encoding: Jika membaca file dari sistem operasi berbeda, pastikan menggunakan encoding='utf-8' saat membuka file: open('file.json', 'r', encoding='utf-8').
  3. Pembersihan Data: Jika data berasal dari API yang tidak stabil, gunakan pustaka dirtyjson atau json5 untuk menangani format yang sedikit longgar.
  4. 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.