4 menit bacaDiperbarui

10 Kesalahan Debugging JSON yang Membuang Jam Kerja (dan Perbaikan Cepatnya)

Oleh Redaksi Safe Local Tools

JSON rusak itu jarang "misterius"—itu dapat diprediksi. Setelah Anda mengenali beberapa pola berulang, Anda berhenti mengejar hantu di log server dan mulai memperbaiki struktur, penyandian, serta asumsi dalam hitungan menit.

Ketika API mengembalikan Unexpected token atau pipeline diam‑diam menjatuhkan konfigurasi, pelakunya jarang "JSON itu sendiri". Lebih sering Anda memberi parser sesuatu yang terlihat seperti JSON di editor tetapi melanggar aturan RFC 8259.

Artikel ini membahas sepuluh kesalahan yang berulang, menjelaskan perilaku parser, serta menunjukkan bagaimana Safe Local Tools memformat dan memeriksa JSON secara lokal di browser—agar Anda tidak mengunggah rahasia ke formatter cloud.

OG illustration

Mengapa JSON "berjalan di Node" tetapi gagal pada parser ketat

Pengembang JavaScript sering mencampur JSON dengan literal objek JavaScript. Keduanya berhubungan tetapi tidak bisa ditukar. JSON adalah format teks pertukaran dengan tata bahasa ketat; JavaScript adalah bahasa pemrograman yang menoleransi fitur tambahan yang JSON sengaja larang.

Miskomunikasi itu menghasilkan bug kategori penuh: kode berjalan baik saat prototipe karena Anda tidak pernah menserialkan, lalu gagal begitu menulis ke disk atau HTTP.

Mode gagal sosial lain: berbagi "JSON" via aplikasi chat yang secara halus menulis ulang karakter—tanda kutip pintar, indentasi hilang—sehingga cuplikan yang Anda lihat bukan lagi byte yang parser terima.

Kesalahan 1 — Koma sisa setelah properti terakhir

Koma sisa legal dalam banyak konteks JavaScript modern tetapi tidak legal dalam JSON ketat.

Perbaikan: hapus koma atau pakai serializer (JSON.stringify) dan hindari mengedit besar secara manual.

Ini menyakitkan pada konfigurasi yang dihasilkan templat ketika bidang terakhir berubah—tambahkan CI yang menjalankan JSON.parse pada setiap fixture ekspor.

{
  "userId": 42,
  "role": "editor",
}

Kesalahan 2 — Kutip tunggal untuk string

JSON memerlukan kutip ganda untuk string. Kutip tunggal tidak valid.

Perbaikan: ganti menjadi " dan escape kutip dalam string sesuai kebutuhan.

{
  'status': 'ok'
}

Kesalahan 3 — Karakter kontrol mentah dalam string

String JSON tidak boleh berisi baris baru mentah; Anda harus mengode sebagai \n.

Gejala: error menyebut karakter kontrol buruk atau offset yang menunjuk ke tengah string besar.

Perbaikan: serialkan dengan benar—jangan tempel prosa langsung kecuali sudah die escape.

Lonjakan kesalahan ini terjadi ketika log atau stack trace dimasukkan manual ke JSON.

Kesalahan 4 — Literal hex, undefined, NaN, Infinity

JSON mendukung null, boolean, angka, string, array, dan objek—tidak ada lagi.

undefined bisa hilang diam‑diam atau merusak serializer lain.

NaN dan Infinity bukan token JSON valid.

Perbaikan: petakan secara eksplisit ke null, string, atau hilangkan kunci.

Payload observabilitas terkenal karena metrik kadang membagi nol dan menyemburkan NaN.

Kesalahan 5 — Kunci duplikat yang terlihat valid tetapi ambigu

Beberapa parser menerima kunci duplikat; konsumen bisa memilih pertama atau terakhir—perilaku berbeda lintas stack.

Perlakukan duplikasi sebagai bug skema; lint konfigurasi dan paksa keunikan.

{
  "retry": false,
  "retry": true
}

Kesalahan 6 — Komentar // dan /* */

JSON tidak punya komentar walau "JSON dengan komentar" tersebar luas.

Gunakan JSONC hanya di mana toolchain secara eksplisit mendukungnya atau simpan metadata di samping muatan.

Tim sering mengganti nama .json sambil menyimpan komentar—nama berkas penting.

Kesalahan 7 — Penyandian salah atau kejutan BOM

JSON untuk API web pada praktiknya UTF‑8. BOM atau campuran penyandian bisa membuat parser tersedak di awal meskipun teks terlihat benar.

Normalisasi ke UTF‑8 tanpa BOM untuk interoperabilitas; verifikasi ekspor dari Excel dan sistem lawas.

Kesalahan 8 — Megabyte JSON ber-indentasi cantik di jalur panas

Ini bukan error sintaks tetapi jebakan operasional: whitespace membengkak bandwidth dan menyembunyikan bug dalam diff.

Minify untuk transport; cantikkan hanya ketika manusia membaca.

Kesalahan 9 — Drift skema: tipe berganti diam‑diam

userId dari angka menjadi string merusak konsumen ketat tetapi membujuk konsumen longgar untuk koersi berbahaya.

Versikan kontrak API dan validasi di perbatasan.

Kesalahan 10 — Mencatat rahasia saat debug struktur

Anda mem-debug dengan mengiris objek—dan secara tidak sengaja menempel token ke tiket.

Alat lokal‑pertama penting. Safe Local Tools dirancang untuk pemrosesan browser‑lokal: konten Anda tetap pada perangkat selama pemformatan yang pantas untuk troubleshooting pengembangan.

Untuk muatan dengan kredensial pilih iterasi offline dan redaksi agresif.

Alur debugging yang menyelesaikan masalah

Tangkap byte tepat yang gagal—bukan versi yang sudah diformat ulang.

Temukan posisi error yang dilaporkan parser.

Perkecil muatan dengan pencarian biner sampai cuplikan gagal minimal muncul.

Validasi terhadap skema OpenAPI atau JSON Schema jika ada.

Setelah memperbaiki, kode ulang sekali melalui serializer produksi—banyak bug tinggal di lapisan double‑stringify.

Perangkap interoperabilitas lintas bahasa

Angka besar bisa kehilangan presisi di tipe number JavaScript meskipun teks JSON secara teoritis valid.

Urutan kunci tidak dijamin stabilitasnya walau manusia mengandalkan urutan untuk review.

String datetime ambigu kecuali Anda menstandarkan ISO‑8601 dengan zona eksplisit.

SDK pihak ketiga kadang mendeserialkan secara "membantu"—pars ketat di perbatasan sering menghemat minggu kemudian.

Validasi skema di CI

Validasi fixture JSON terhadap komponen JSON Schema atau OpenAPI. Pemeriksaan sintaks menangkap koma; skema menangkap tipe salah sebelum deploy.

Setelah Anda tahu apa yang merusak JSON, sisanya mekanis: normalisasi kutip, hapus token ilegal, validasi struktur, dan bandingkan sebelum/sesudah tanpa mengirim data keluar mesin Anda.

Saat Anda siap merapikan muatan berantakan dan memastikan ia ter-parse bersih, Coba Formatter JSON →