5 Kesalahan JSON Paling Umum dan Cara Memperbaikinya
Ada pengalaman universal yang dialami setiap orang yang berurusan dengan JSON: kamu yakin datanya sudah benar, tapi aplikasi berkata "invalid JSON". Kamu menatap tumpukan kurung kurawal itu selama sepuluh menit dan tidak menemukan apa yang salah. Rasanya seperti mencari jarum di tumpukan jerami — padahal jarumnya sering kali hanya sebuah koma.
Kabar baiknya: sebagian besar error JSON berasal dari segelintir kesalahan yang itu-itu saja. Artikel ini membahas lima kesalahan paling umum — yang menurut pengalaman mencakup lebih dari 90% kasus JSON invalid — lengkap dengan contoh salah vs benar, cara memperbaikinya, dan cara mencegahnya terulang. Di akhir ada juga panduan membaca pesan error dan checklist validasi cepat.
Kesalahan 1: Koma yang Salah Tempat (Trailing Comma)
Ini adalah juara bertahan kesalahan JSON nomor satu di seluruh dunia. Penyebabnya manusiawi: saat menambah atau menghapus baris terakhir sebuah objek atau array, koma pemisahnya tertinggal atau terlupakan.
Contoh SALAH — koma setelah elemen terakhir:
{
"nama": "Budi Santoso",
"umur": 30,
"kota": "Jakarta",
}
Contoh SALAH — koma kurang di tengah:
{
"nama": "Budi Santoso"
"umur": 30,
"kota": "Jakarta"
}
Contoh BENAR:
{
"nama": "Budi Santoso",
"umur": 30,
"kota": "Jakarta"
}
Aturannya sederhana tapi mutlak: koma memisahkan antar-elemen, bukan mengakhiri elemen. Setiap koma harus punya "tetangga" di kanan dan kirinya.
Cara memperbaiki: hapus koma yang menggantung di akhir, atau tambahkan koma yang hilang di tengah. Kalau JSON-mu panjang, jangan cari manual — tempel ke JSON Formatter; ia akan menunjukkan nomor baris persis di mana parser tersandung.
Cara mencegah: saat menghapus baris terakhir dari sebuah objek, biasakan mengecek baris di atasnya — komanya harus ikut dihapus. Sebagian editor kode modern memberi peringatan otomatis untuk trailing comma; manfaatkan itu.
Kasus yang sama berlaku untuk array:
// SALAH
{ "hobi": ["membaca", "renang",] }
// BENAR
{ "hobi": ["membaca", "renang"] }
Kesalahan 2: Tanda Kutip yang Tidak Sesuai Aturan
JSON hanya mengakui tanda kutip dua ("). Tiga varian kesalahan kutip ini muncul terus-menerus:
2a. Memakai kutip satu:
// SALAH - umum di kalangan yang terbiasa dengan JavaScript/Python
{ 'nama': 'Siti', 'umur': 28 }
// BENAR
{ "nama": "Siti", "umur": 28 }
Di JavaScript, 'nama' dan "nama" sama saja — tapi JSON bukan JavaScript. Spesifikasi JSON hanya mengizinkan kutip dua, tanpa pengecualian.
2b. Kunci tanpa tanda kutip:
// SALAH
{ nama: "Siti", umur: 28 }
// BENAR
{ "nama": "Siti", "umur": 28 }
Lagi-lagi kebiasaan dari JavaScript (di mana kunci objek boleh tanpa kutip) terbawa ke JSON. Di JSON, kunci wajib dikutip.
2c. Kutip di dalam string tidak di-escape:
// SALAH - parser bingung: string berakhir di mana?
{ "komentar": "Dia berkata "halo" kepada saya" }
// BENAR - kutip dalam string diawali backslash
{ "komentar": "Dia berkata \"halo\" kepada saya" }
Kalau teksmu mengandung tanda kutip dua, awali dengan backslash (\"). Atau, kalau memungkinkan, parafrase kalimatnya agar tidak butuh kutip di dalam string.
Cara memperbaiki: ganti semua kutip satu menjadi kutip dua (hati-hati: jangan asal find-replace kalau string-mu mengandung apostrof seperti "jam 5 o'clock" — apostrof/kutip satu di dalam string kutip-dua itu legal dan tidak perlu diubah). Untuk kutip di dalam string, tambahkan backslash.
Kesalahan 3: Kurung Kurawal dan Kurung Siku Tidak Berpasangan
Setiap { harus ditutup }, setiap [ ditutup ], dan urutan penutupannya harus benar (yang dibuka terakhir, ditutup pertama — seperti tumpukan piring).
Contoh SALAH — kurung tidak seimbang:
{
"nama": "Rina",
"alamat": {
"kota": "Bandung",
"kode_pos": "40115"
,
"telepon": "081234567890"
}
Di sini objek alamat tidak pernah ditutup — ada koma nyasar dan kurung tutupnya kurang satu. Parser akan menunjuk ke akhir file dengan pesan membingungkan.
Contoh SALAH — jenis kurung tertukar:
// SALAH
{ "nilai": [85, 90, 78 }
// BENAR
{ "nilai": [85, 90, 78] }
Contoh BENAR struktur bersarang:
{
"nama": "Rina",
"alamat": {
"kota": "Bandung",
"kode_pos": "40115"
},
"telepon": "081234567890"
}
Cara memperbaiki: untuk JSON pendek, hitung manual — setiap pembuka harus punya penutup. Untuk JSON panjang, cara manual tidak realistis; pakai formatter dengan fitur pretty print dan pewarnaan sintaks. Setelah diformat rapi dengan indentasi, ketidakseimbangan kurung biasanya langsung terlihat: satu blok menjorok aneh atau berwarna "belum tertutup".
Cara mencegah: tulis kurung buka dan tutup berpasangan sejak awal, baru isi tengahnya. Kebiasaan kecil ini mencegah 90% masalah kurung:
1. Ketik { } dulu
2. Baru isi di antaranya: { "nama": ... }
Kesalahan 4: Tipe Data yang Keliru
Kesalahan ini licik karena JSON-nya valid secara sintaks — tidak ada error merah — tapi salah secara makna, sehingga aplikasi berperilaku aneh.
4a. Angka dalam kutip vs tanpa kutip:
{
"umur": "30",
"harga": 89900
}
"umur": "30" adalah string, bukan angka. Akibatnya: program tidak bisa menjumlahkan umur, perbandingan umur > 18 bisa gagal, dan sorting angka jadi kacau (string "100" dianggap lebih kecil dari "20" karena dibandingkan per karakter!).
Perbaikan: kalau datanya memang angka yang akan dihitung/dibandingkan, tulis tanpa kutip: "umur": 30.
4b. Boolean dalam kutip:
// SALAH - ini string "true", bukan boolean true!
{ "aktif": "true" }
// BENAR
{ "aktif": true }
String "false" itu truthy di banyak bahasa (karena string tidak kosong dianggap benar) — bug yang sangat sulit dilacak sumbernya.
4c. Angka berawalan nol:
// SALAH - sintaks tidak valid
{ "kode_pos": 040115 }
// BENAR - kode pos adalah string
{ "kode_pos": "40115" }
Aturan JSON: angka tidak boleh diawali nol (kecuali angka nol itu sendiri, atau desimal seperti 0.5). Kode pos, nomor telepon, NIK — semua yang diawali nol harus ditulis sebagai string berkutip.
4d. Null ditulis sebagai string:
// SALAH - string "null", bukan null!
{ "tanggal_keluar": "null" }
// BENAR
{ "tanggal_keluar": null }
Cara mencegah: setiap kali menulis nilai, tanyakan: "apakah ini akan dihitung?" → number. "Apakah ini ya/tidak?" → boolean tanpa kutip. "Apakah diawali nol atau mengandung non-angka?" → string.
Kesalahan 5: Karakter Khusus yang Tidak Di-escape
String JSON tidak boleh mengandung karakter kontrol mentah (seperti baris baru asli atau tab asli). Ini sering muncul saat menyalin teks dari Word atau WhatsApp langsung ke JSON.
Contoh SALAH — baris baru mentah di dalam string:
{
"alamat": "Jl. Merdeka No. 45
Bandung"
}
Baris baru di tengah string itu ilegal dalam JSON. Parser akan error tepat di baris tersebut.
Contoh BENAR — pakai escape sequence:
{
"alamat": "Jl. Merdeka No. 45\nBandung"
}
Daftar escape yang perlu kamu kenal:
| Escape | Artinya | |—|—| | \n | Baris baru | | \t | Tab | | \" | Tanda kutip dua | | \\ | Backslash itu sendiri | | \uXXXX | Karakter Unicode (misal \u00e9 untuk é) |
Kasus umum: menyalin alamat multi-baris dari Google Maps, atau teks berparagraf dari dokumen. Solusinya: ganti setiap baris baru dengan \n sebelum memasukkannya ke JSON. Sebagian besar JSON formatter online melakukan ini otomatis saat kamu menempel teks multi-baris ke dalam mode pembuatan string — manfaatkan fiturnya.
Jebakan backslash Windows: path file Windows seperti "C:\data\file.json" — setiap backslash harus di-escape: "C:\\data\\file.json". Atau lebih aman: pakai garis miring biasa "C:/data/file.json" yang selalu valid.
Cara Membaca Pesan Error JSON
Pesan error JSON terlihat menakutkan tapi sebenarnya sangat membantu — kalau tahu cara membacanya:
Unexpected token } in JSON at position 120— ada kurung tutup yang tidak punya pasangan, sekitar karakter ke-120. Cari ke belakang dari posisi itu.Unexpected token , ...— koma bermasalah: kemungkinan trailing comma atau koma ganda,,.Unexpected end of JSON input— JSON terpotong; biasanya kurung tidak ditutup atau data tidak lengkap saat disalin.Unexpected token ' ...— ada kutip satu yang nyasar (kesalahan 2a).- Error menunjuk baris X — kesalahan sebenarnya sering berada satu-dua baris SEBELUM baris yang ditunjuk, karena parser baru sadar ada masalah saat membaca token berikutnya. Jadi kalau error di baris 15, periksa baris 13–14 dulu.
Pola pikirnya: pesan error memberitahu di mana parser menyerah, bukan selalu di mana kesalahanmu. Mundur satu-dua langkah dari titik itu, dan pelakunya biasanya ketemu.
Checklist Validasi Cepat Sebelum Memakai JSON
Jadikan ini kebiasaan — 30 detik yang menghemat 30 menit debugging:
- [ ] Tempel JSON ke validator JSON online — pastikan statusnya VALID.
- [ ] Semua kunci memakai kutip dua, bukan kutip satu, bukan tanpa kutip.
- [ ] Tidak ada koma setelah elemen terakhir di objek maupun array.
- [ ] Setiap
{punya}, setiap[punya]— cek dengan pretty print. - [ ] Angka yang akan dihitung ditulis tanpa kutip; boolean
true/false/nullditulis tanpa kutip dan huruf kecil semua. - [ ] String multi-baris sudah memakai
\n, bukan baris baru mentah. - [ ] Tidak ada komentar
//di dalam JSON.
Kalau semua tercentang, JSON-mu hampir pasti aman dipakai.
Mencegah Lebih Baik: Kebiasaan Menulis JSON yang Bersih
- Satu gaya, konsisten: pilih format kunci (misal
snake_case) dan pakai di seluruh file. Konsistensi mencegah salah ketik kunci. - Jangan edit JSON raksasa di notepad polos: untuk file besar, pakai editor dengan pewarnaan sintaks JSON atau formatter online dengan pretty print.
- Simpan draf sebelum eksperimen: tulis draf di notepad online sebelum memindahkannya ke sistem yang memakainya — jadi kalau rusak, versi aslinya aman.
- Validasi setiap kali mengubah: sekecil apa pun perubahanmu (bahkan hanya menambah satu baris), validasi ulang. Error JSON paling sering lahir dari "perubahan kecil" yang tidak divalidasi.
- Dokumentasikan struktur untuk tim: kalau JSON-mu dipakai banyak orang, tulis contoh yang valid sebagai referensi. Satu contoh benar mencegah puluhan error.
Studi Kasus Debugging: Menemukan 3 Error dalam Satu File
Teori sudah, sekarang praktik forensik. Berikut sebuah JSON "kiriman teman" yang katanya sudah benar tapi ditolak aplikasi. Bisakah kamu menemukan 3 kesalahannya sebelum membaca pembahasannya?
{
"nama": "Dimas Prasetyo",
"umur": "24",
"kota": 'Yogyakarta',
"pekerjaan": "Desainer Grafis",
"kontak": {
"email": "dimas@email.com",
"telepon": "081234567890",
},
"keahlian": ["Photoshop", "Figma", "Illustrator"]
}
Error 1 — baris "umur": "24": umur ditulis sebagai string "24", bukan number 24. Kalau aplikasi menghitung atau membandingkan umur, ini akan bermasalah. Perbaikan: "umur": 24.
Error 2 — baris "kota": 'Yogyakarta': memakai kutip satu. JSON hanya mengakui kutip dua. Perbaikan: "kota": "Yogyakarta".
Error 3 — koma setelah "telepon": "081234567890",: trailing comma sebelum penutup objek kontak. Perbaikan: hapus koma itu.
Versi yang sudah diperbaiki:
{
"nama": "Dimas Prasetyo",
"umur": 24,
"kota": "Yogyakarta",
"pekerjaan": "Desainer Grafis",
"kontak": {
"email": "dimas@email.com",
"telepon": "081234567890"
},
"keahlian": ["Photoshop", "Figma", "Illustrator"]
}
Perhatikan: ketiga error ini persis tiga dari lima kesalahan di artikel ini (tipe data, kutip, koma). Itulah kenapa daftar lima ini begitu berharga — ia mencakup hampir semua yang akan kamu temui di dunia nyata. Latihan seperti ini, diulang beberapa kali dengan variasi, akan membuat matamu otomatis "gatal" melihat JSON yang salah — kemampuan debugging yang sangat dihargai di dunia kerja.
3 Kasus Tricky: Error yang Tidak Terlihat Sekilas
Lima kesalahan utama sudah dikuasai? Berikut tiga kasus "licin" yang bahkan menjebak pengguna berpengalaman:
Kasus A: Karakter Invisible
{ "nama": "Budi", "umur": 30 }
Terlihat sempurna — tapi JSON-nya invalid. Penyebab: ada karakter tak terlihat (misalnya non-breaking space dari copy-paste Word, atau zero-width character dari web) yang menyelinap di antara token. Mata manusia tidak bisa melihatnya; parser bisa.
Solusi: kalau JSON "terlihat benar tapi invalid", salin ulang teksnya melalui notepad polos (yang membuang format tersembunyi), atau ketik ulang bagian yang dicurigai. Validator yang baik akan menunjuk posisi karakter aneh itu.
Kasus B: Duplikat Kunci
{
"nama": "Budi",
"umur": 30,
"nama": "Andi"
}
Secara sintaks ini valid — tidak ada error merah. Tapi secara makna berbahaya: sebagian besar parser hanya memakai nilai terakhir ("Andi"), sebagian menolak, sebagian mengambil yang pertama. Hasilnya tidak konsisten antar sistem.
Solusi: pastikan setiap kunci unik dalam satu objek. Duplikat hampir selalu berasal dari copy-paste baris yang lupa diedit kuncinya — periksa ulang setelah menyalin blok.
Kasus C: Koma vs Titik Desimal ala Indonesia
{ "harga": 89,900 }
Penulis Indonesia terbiasa menulis 89,900 (dengan koma sebagai pemisah ribuan). Di JSON, koma adalah pemisah elemen — jadi ini terbaca sebagai dua nilai dan langsung error. Yang benar: "harga": 89900 (tanpa pemisah ribuan) atau "harga": 89900.5 (titik untuk desimal).
Solusi: dalam JSON, angka selalu ditulis gaya internasional — tanpa pemisah ribuan, titik untuk desimal. Format tampilan "Rp89.900" adalah urusan tampilan aplikasi, bukan urusan data.
Ketiga kasus ini mengajarkan satu pelajaran: validator adalah teman terbaikmu. Mata manusia hebat dalam memahami makna tapi buruk dalam memeriksa sintaks karakter-per-karakter — serahkan pekerjaan itu ke mesin, setiap kali.
FAQ Seputar Kesalahan JSON
1. Kenapa JSON saya error padahal kelihatannya sudah benar? Sembilan dari sepuluh kasus penyebabnya adalah lima kesalahan di artikel ini: koma nyasar, kutip salah, kurung tidak berpasangan, tipe data keliru, atau karakter khusus mentah. Tempel JSON-mu ke validator online — ia akan menunjuk baris dan jenis kesalahan persisnya, jauh lebih cepat daripada mencari manual.
2. Apa itu trailing comma dan kenapa dilarang di JSON? Trailing comma adalah koma setelah elemen terakhir dalam objek atau array, seperti {"a": 1,}. Di JavaScript modern ini diperbolehkan, tapi spesifikasi JSON melarangnya. Penyebab umumnya: menghapus baris terakhir tanpa menghapus komanya, atau menyalin dari kode JavaScript langsung ke JSON.
3. Bagaimana cara menemukan kurung yang tidak berpasangan di JSON yang panjang? Jangan hitung manual. Tempel ke JSON formatter dengan pretty print — indentasi yang rapi membuat blok yang tidak tertutup langsung terlihat janggal. Sebagian formatter juga menandai baris tepat di mana struktur mulai tidak seimbang.
4. Apakah komentar diperbolehkan di dalam JSON? Tidak dalam JSON standar — // atau / / akan menyebabkan error. Kalau kamu butuh dokumentasi, simpan di file terpisah, atau tambahkan kunci khusus seperti "_komentar": "..." (trik umum yang tetap valid secara sintaks karena ia hanyalah data biasa).
5. JSON saya valid tapi aplikasinya tetap error — kenapa? Itu masuk wilayah kesalahan tipe data (kesalahan 4) atau struktur yang tidak sesuai harapan aplikasi. Contoh: aplikasi mengharapkan "umur" sebagai angka tapi kamu mengirim string "30". Validasi sintaks hanya memastikan formatnya benar; kesesuaian makna dengan kebutuhan aplikasi harus kamu periksa manual terhadap dokumentasinya.
Kesimpulan
Lima kesalahan di artikel ini — koma yang salah tempat, kutip yang tidak sesuai aturan, kurung tidak berpasangan, tipe data keliru, dan karakter khusus mentah — adalah penyebab hampir semua JSON invalid yang akan kamu temui. Kabar baiknya, semuanya bisa dicegah dengan dua kebiasaan: menulis dengan hati-hati (kurung berpasangan sejak awal, koma dicek tiap edit) dan memvalidasi setiap kali sebelum JSON dipakai.
Jangan pernah menebak-nebak apakah JSON-mu valid. Biarkan mesin yang memeriksa — itu gunanya validator.
Punya JSON yang error dan bikin frustrasi? Tempel sekarang ke JSON Formatter & Validator gratis dari editpad.id/ — ia akan menunjukkan persis di baris mana masalahnya dan membantumu merapikannya dalam hitungan detik. Selamat debugging!
