Validasi JSON adalah hal pertama yang sebaiknya Anda lakukan setiap kali JSON keluar dari satu sistem dan masuk ke sistem lain: sebelum menyentuh API Anda, sebelum disimpan ke basis data, sebelum diproses oleh sebuah skrip. JSON yang tidak valid tidak menghasilkan pesan kesalahan yang membantu; ia menghasilkan kegagalan penguraian yang sering disalahartikan ke komponen yang salah. Panduan ini mencakup setiap metode praktis untuk memvalidasi JSON secara online dan offline, menjelaskan apa yang sebenarnya dimaksud "JSON valid", dan menunjukkan cara mendiagnosis serta memperbaiki kesalahan yang paling umum.
Apa sebenarnya arti "JSON valid"?
JSON (JavaScript Object Notation) memiliki spesifikasi formal yang didefinisikan oleh RFC 8259 dan standar ECMA-404. Dokumen JSON valid ketika sepenuhnya sesuai dengan spesifikasi tersebut — tidak lebih, tidak kurang. Aturannya lebih ketat daripada yang diperkirakan banyak orang, dan beberapa hal yang diizinkan JavaScript secara eksplisit dilarang dalam JSON.
Aturan spesifikasi JSON
- String harus memakai tanda kutip ganda - string berkutip tunggal (`'value'`) bukan JSON valid meskipun JavaScript menerimanya.
- Tanpa koma di akhir - `[1, 2, 3,]` dan `{"a": 1,}` tidak valid; koma setelah elemen terakhir harus dihapus.
- Tanpa komentar - `// komentar baris` dan `/* komentar blok */` bukan bagian dari spesifikasi JSON.
- Tanpa nilai undefined - `undefined` adalah konsep JavaScript; JSON hanya mengizinkan `null`, angka, string, boolean, array, dan objek.
- Angka tidak boleh memiliki nol di awal - `012` bukan JSON valid; gunakan `12`.
- Kunci objek harus berupa string - `{1: "value"}` tidak valid; kunci harus berupa string berkutip ganda.
- Tanpa karakter kontrol di dalam string - baris baru mentah, tab, dan karakter kontrol lainnya harus di-escape (`\n`, `\t`, dll.).
Note
Valid secara sintaks vs. valid secara semantik
Dokumen JSON bisa valid secara sintaks (terbentuk benar menurut spesifikasi) tetapi tidak valid secara semantik untuk aplikasi Anda. Misalnya, objek JSON dengan "age" bernilai -5 adalah JSON valid, tetapi usia yang tidak sah untuk profil pengguna. Validasi sintaks adalah yang diperiksa oleh parser JSON; validasi skema adalah yang menangkap kesalahan semantik. Kedua lapisan sama pentingnya, dan panduan ini membahas keduanya.
Cara memvalidasi JSON online dalam hitungan detik
Cara tercepat memeriksa apakah sebuah string JSON valid adalah menempelkannya ke validator JSON online. Tanpa instalasi, tanpa konfigurasi, tanpa akun. Hasilnya seketika, dan - ketika Anda memakai alat berbasis browser - data Anda tidak pernah meninggalkan perangkat Anda.
Teks JSON adalah nilai yang diserialisasi. Perlu dicatat bahwa beberapa spesifikasi JSON terdahulu membatasi teks JSON hanya pada objek atau array.
Menggunakan Pemformat dan Validator JSON
Pemformat & Validator JSON di Aback Tools memvalidasi dan memformat JSON secara bersamaan. Tempelkan string JSON apa pun dan ia langsung memberi tahu apakah masukan valid. Jika tidak valid, alat ini menandai posisi kesalahan dengan nomor baris dan deskripsi bahasa sederhana tentang apa yang salah. Jika valid, ia menghasilkan JSON yang bersih dan terindentasi yang bisa langsung Anda salin ke proyek.
Pendekatan dua fungsi ini penting dalam praktik. Ketika Anda menerima JSON dari API, menyalinnya dari berkas konfigurasi, atau mengambilnya dari baris log, teks mentahnya sering diminimalkan dan sulit dibaca. Memformatnya sebagai bagian dari validasi memberi dua hal sekaligus: konfirmasi bahwa JSON tersebut valid, dan versi yang dapat dibaca untuk benar-benar Anda periksa.
Tip
Pemformat & Validator JSON
Tempelkan string JSON apa pun untuk langsung memvalidasi, mencetak rapi, dan mewarnai sintaks di browser Anda - dengan diagnostik kesalahan tingkat baris dan tanpa unggahan.
Kesalahan JSON umum dan cara memperbaikinya
Sebagian besar dokumen JSON yang tidak valid gagal karena salah satu dari lima alasan. Mengenal pola-pola ini memungkinkan Anda memperbaiki kesalahan dengan cepat tanpa sepenuhnya bergantung pada alat untuk mendiagnosisnya.
Koma di akhir
Koma di akhir adalah kesalahan JSON paling umum, sebagian besar karena JavaScript dan sebagian besar bahasa modern mengizinkannya pada literal objek dan array. JSON tidak. Hapus koma setelah properti terakhir di setiap objek dan setelah elemen terakhir di setiap array.
// ❌ Tidak valid - koma setelah properti terakhir
{
"name": "Alice",
"age": 30,
}
// ✓ Valid - tanpa koma akhir
{
"name": "Alice",
"age": 30
}String berkutip tunggal
Kutip tunggal valid di JavaScript tetapi eksplisit dilarang dalam JSON. Setiap string - baik kunci maupun nilai - harus memakai kutip ganda. Kesalahan ini umum ketika JSON ditulis tangan atau disalin dari literal objek JavaScript.
// ❌ Tidak valid - kunci dan nilai berkutip tunggal
{'city': 'London'}
// ✓ Valid - kunci dan nilai berkutip ganda
{"city": "London"}Komentar di dalam JSON
JSON tidak memiliki sintaks komentar. Jika JSON Anda memuat komentar `//` atau `/* */` - sering ditambahkan ke berkas konfigurasi sebagai dokumentasi - parser JSON standar akan menolak seluruh dokumen. Singkirkan semua komentar sebelum penguraian, atau beralihlah ke format seperti JSONC atau JSON5 yang mendukungnya secara native.
// ❌ Tidak valid - komentar bukan bagian dari spesifikasi JSON
{
// Ini objek pengguna
"name": "Alice",
"role": "admin" /* izin tingkat tinggi */
}Karakter khusus tanpa escape di string
Baris baru mentah, tab, garis miring terbalik, dan karakter kontrol Unicode tertentu harus di-escape di dalam string JSON. Baris baru mentah di dalam nilai string - berbeda dari urutan escape `\n` - membuat JSON tak dapat diurai. Kesalahan ini sering muncul ketika JSON dibuat dengan menggabungkan string dalam kode alih-alih memakai serialisator JSON yang tepat.
// ❌ Tidak valid - baris baru mentah di dalam nilai
{"message": "line one
line two"}
// ✓ Valid - baris baru yang di-escape
{"message": "line one\nline two"}Kurung atau kurung kurawal yang tidak berpasangan
Kurung kurawal yang belum ditutup, kurung siku yang belum ditutup, atau pembatas penutup yang tak berpasangan menyebabkan kegagalan penguraian. Ini umum pada JSON yang disunting manual dan JSON yang dibuat oleh kode yang menyusun payload lewat penggabungan string. Pemformat dengan pencocokan pembatas membuatnya langsung terlihat.
// ❌ Tidak valid - array dibuka tetapi objek yang ditutup
{
"items": [1, 2, 3
}
// ✓ Valid - pembatas berpasangan
{
"items": [1, 2, 3]
}Detektor Kunci Duplikat JSON
Mendeteksi kunci objek yang berulang pada payload JSON apa pun - penimpaan senyap akibat kunci duplikat dianggap valid oleh sebagian parser tetapi menyebabkan kehilangan data dan bug yang sulit didiagnosis.
Validasi JSON Schema: memeriksa nilai, bukan hanya sintaks
Validasi sintaks memastikan JSON terbentuk dengan baik. Validasi skema memastikan JSON berisi data yang benar - field yang benar, tipe yang benar, rentang nilai yang benar. Dua pemeriksaan berbeda ini sama-sama diperlukan dalam sistem produksi.
Apa itu JSON Schema?
JSON Schema adalah kosakata untuk mendeskripsikan struktur dan batasan dokumen JSON. Dokumen skema menentukan field mana yang wajib, tipe apa yang harus dimiliki setiap field, nilai minimum dan maksimum untuk angka, pola string yang diizinkan, dan lainnya. Saat memvalidasi dokumen JSON terhadap skema, Anda mendapat kesalahan yang presisi seperti "field 'email' wajib ada" atau "field 'age' harus berupa bilangan bulat positif" - bukan sekadar "JSON tidak valid".
Menggunakan Validator JSON Schema
Validator JSON Schema di Aback Tools menerima payload JSON dan JSON Schema, lalu memvalidasi payload terhadap batasan skema. Ia melaporkan kesalahan pada tingkat aturan dengan path field persis yang gagal - Anda tahu bukan hanya bahwa validasi gagal, tetapi field mana yang melanggar aturan mana. Ini alat yang tepat ketika Anda perlu memastikan respons API sesuai kontrak, atau berkas konfigurasi memuat semua pengaturan yang wajib.
Note
Validasi sintaks vs. validasi skema
| Aspek | Validasi sintaks | Validasi skema |
|---|---|---|
| Yang diperiksa | Kesesuaian dengan spesifikasi JSON | Tipe data, field, batasan |
| Alat yang diperlukan | Parser JSON apa pun | Validator JSON Schema |
| Keluaran kesalahan | Posisi baris/karakter | Path field + aturan yang dilanggar |
| Menangkap | Kutip hilang, koma salah | Tipe salah, field hilang |
| Kapan dipakai | Selalu - pemeriksaan pertama | Saat ada kontrak |
| Lulus = jaminan | Dapat diurai pustaka JSON mana pun | Cocok dengan model data Anda |
Membuat skema dari payload yang sudah ada
Cara tercepat menambahkan validasi skema ke proyek yang sudah berjalan adalah membuat skema dari payload yang terbukti baik. Tempelkan objek JSON representatif ke Generator JSON Schema dan ia menghasilkan skema lengkap dengan definisi tipe, field wajib, dan petunjuk format. Salin keluarannya ke proyek Anda dan gunakan sebagai kontrak validasi untuk semua payload berikutnya dengan tipe tersebut.
Memvalidasi JSON secara terprogram
Alat online adalah pilihan tercepat untuk pemeriksaan sekali pakai, tetapi sistem produksi membutuhkan validasi JSON yang tertanam dalam kode. Setiap bahasa pemrograman besar memiliki setidaknya satu pustaka penguraian JSON yang terpelihara baik, dan sebagian besar juga punya pustaka validasi skema khusus.
JavaScript dan TypeScript
Di JavaScript, `JSON.parse()` melempar `SyntaxError` ketika menerima JSON tidak valid - bungkus dengan try/catch agar kesalahan ditangani dengan rapi. Untuk validasi skema, AJV (Another JSON Validator) adalah pustaka paling banyak dipakai, mendukung JSON Schema Draft-07 hingga Draft 2020-12 dengan performa tinggi. Zod adalah alternatif populer yang berorientasi TypeScript, memvalidasi JSON terhadap skema tipe runtime dengan inferensi TypeScript penuh. Konverter JSON ke Skema Zod di Aback Tools menghasilkan skema Zod dari payload JSON apa pun secara otomatis.
function isValidJson(input: string): boolean {
try {
JSON.parse(input);
return true;
} catch {
return false;
}
}
// Or get the parsed value and the error together:
function parseJson<T>(input: string): { data: T } | { error: string } {
try {
return { data: JSON.parse(input) as T };
} catch (e) {
return { error: (e as SyntaxError).message };
}
}Python
Modul `json` bawaan Python melempar `json.JSONDecodeError` (subclass dari `ValueError`) ketika penguraian gagal. Objek kesalahannya memuat nomor baris, kolom, dan deskripsi. Untuk validasi skema, jsonschema dan pydantic adalah pilihan standar - pydantic sangat populer di proyek FastAPI karena memvalidasi dan mendeserialisasi JSON menjadi objek Python bertipe dalam satu langkah.
import json
def is_valid_json(text: str) -> bool:
try:
json.loads(text)
return True
except json.JSONDecodeError as e:
print(f"Invalid JSON at line {e.lineno}, col {e.colno}: {e.msg}")
return FalseBaris perintah
Di sistem apa pun dengan Python terpasang, `python3 -m json.tool input.json` memvalidasi dan mencetak rapi berkas JSON dalam satu perintah. Kode keluar bernilai bukan nol saat gagal, sehingga cocok untuk skrip shell dan pipeline CI. Alat `jq` adalah alternatif yang lebih andal: `jq . input.json` memvalidasi dan memformat, sedangkan `jq 'empty' input.json` memvalidasi tanpa menghasilkan keluaran.
# Validate and pretty-print with Python (built-in, no install)
python3 -m json.tool input.json
# Validate silently with jq (exit code 0 = valid, 1 = invalid)
jq empty input.json && echo "Valid" || echo "Invalid"
# Validate multiple files with a loop
for f in *.json; do
jq empty "$f" && echo "$f: valid" || echo "$f: INVALID"
doneTip
Memvalidasi format JSON khusus
Validasi JSON standar mencakup berkas `.json` dan payload API. Namun JSON juga muncul dalam beberapa format lain yang punya persyaratan validasi tersendiri - format di mana parser JSON standar menghasilkan hasil yang salah atau menolak seluruh masukan.
JSONL dan NDJSON (JSON Lines)
Berkas JSON Lines (`.jsonl`) memuat satu objek JSON per baris tanpa array pembungkus. Format ini menjadi standar untuk berkas log, dataset pelatihan ML, dan API streaming. Parser JSON standar akan menolak berkas JSONL karena berkas secara keseluruhan bukan dokumen JSON yang valid - setiap baris harus diurai satu per satu. Validator & Perbaiki JSON Lines memvalidasi setiap baris secara terpisah, melaporkan nomor baris mana yang bermasalah, dan menawarkan perbaikan otomatis yang aman untuk masalah format umum.
JSON dengan kunci duplikat
Spesifikasi JSON secara teknis mengizinkan kunci duplikat pada objek, tetapi perilakunya tidak terdefinisi - parser berbeda menanganinya dengan cara berbeda. `json.loads()` Python mempertahankan nilai terakhir; sebagian parser mempertahankan yang pertama; yang lain melempar kesalahan. Dalam praktiknya, kunci duplikat hampir selalu merupakan bug - penggabungan yang keliru atau kesalahan templat. Detektor Kunci Duplikat JSON menemukan semua kunci berulang dan memberi tahu persis di mana mereka muncul.
JSON di dalam berkas konfigurasi YAML
YAML adalah superset JSON, sehingga semua JSON valid juga merupakan YAML valid. Namun JSON yang tertanam di berkas YAML - misalnya sebagai nilai field string - memerlukan validasi tersendiri. Jika Anda bekerja dengan config YAML yang memuat nilai JSON tertanam, validasi bagian JSON secara terpisah dengan pemformat JSON, lalu validasi YAML keseluruhan dengan validator YAML. Jika proyek Anda memakai kedua format dan Anda perlu membandingkan dua berkas konfigurasi, Penyorot Perbedaan JSON/YAML menangani keduanya sekaligus.
Warning
Praktik terbaik validasi JSON
Memvalidasi JSON satu kali sebelum operasi penting itu bagus. Menanamkan validasi di setiap titik di mana JSON masuk atau keluar dari sistem Anda lebih baik. Praktik-praktik ini berlaku baik Anda membangun API, memproses pipeline data, maupun mengelola berkas konfigurasi.
Validasi saat ingest, bukan saat konsumsi
Waktu yang tepat untuk memvalidasi JSON adalah saat ia pertama kali masuk ke sistem Anda - di batas API, di handler unggah berkas, di konsumen antrean pesan. Memvalidasi saat konsumsi (di fungsi yang membaca nilai jauh di dalam kode) berarti data tidak valid menyebar lebih jauh sebelum gagal, membuat kesalahan lebih sulit dilacak. Validasilah lebih awal dan tolak masukan tidak valid di titik masuk.
Gunakan skema, bukan sekadar pemeriksaan sintaks
Validasi sintaks adalah standar minimum. Pada sistem mana pun yang memuat data kritis bisnis melalui JSON - catatan pengguna, payload pembayaran, nilai konfigurasi - skema menambah lapisan kedua yang menangkap tipe salah, field wajib yang hilang, dan nilai di luar rentang yang tidak dapat dideteksi validasi sintaks. Buat skema awal Anda dari payload yang terbukti baik menggunakan Generator JSON Schema dan perhalus seiring berkembangnya model data Anda.
Tangani kesalahan validasi secara eksplisit
Panggilan `JSON.parse()` yang dibungkus try/catch tetapi menelan kesalahan dan mengembalikan null lebih buruk daripada tidak memvalidasi sama sekali - ia menyembunyikan masalah. Ketika validasi JSON gagal, catat kesalahannya beserta sumber masukan, pesan kesalahan persis, dan konteks yang cukup untuk mereproduksi masalah. Kembalikan kesalahan yang bermakna ke pemanggil alih-alih hasil kosong yang memicu kesalahan sekunder di tempat lain.
- Catat masukan mentah - ketika validasi JSON gagal di produksi, masukan mentah adalah artefak debugging paling berharga. Catat versi terpotong (500 karakter pertama) beserta kesalahannya.
- Sertakan konteks sumber - catat dari mana JSON berasal: endpoint API mana, berkas mana, pesan antrean mana. Ini mengubah kesalahan penguraian generik menjadi insiden yang dapat ditindaklanjuti.
- Siapkan peringatan untuk kegagalan penguraian - lonjakan kesalahan validasi JSON sering menandakan perubahan yang merusak pada API hulu atau deployment yang membawa bug serialisasi.
- Uji dengan masukan tidak valid - sertakan JSON tidak valid (koma akhir, kutip hilang, tipe salah) dalam suite pengujian Anda untuk memastikan penanganan kesalahan Anda bekerja dengan benar.
Tip
Validator JSON Schema
Validasi payload JSON apa pun terhadap JSON Schema dan dapatkan diagnostik kesalahan tingkat aturan dengan path field yang persis - tanpa instalasi, tanpa unggahan.
Key takeaways
- JSON valid mengikuti RFC 8259 secara ketat: hanya string berkutip ganda, tanpa koma akhir, tanpa komentar, tanpa `undefined`, dan tanpa karakter kontrol yang tidak di-escape.
- Pemformat & Validator JSON memvalidasi dan memformat JSON sekaligus, dengan diagnostik kesalahan tingkat baris yang berjalan sepenuhnya di browser Anda.
- Lima kesalahan JSON paling umum adalah: koma akhir, string berkutip tunggal, komentar, karakter kontrol tanpa escape, dan pembatas tak berpasangan - semuanya langsung tertangkap oleh validator.
- Validasi sintaks memastikan dapat diurai; validasi JSON Schema memastikan data Anda sesuai kontrak yang diharapkan - kedua pemeriksaan melayani tujuan berbeda.
- Gunakan `JSON.parse()` dalam try/catch untuk validasi dalam kode; gunakan `jq empty` untuk pemeriksaan CLI cepat di pipeline CI.
- Format khusus seperti JSONL, JSON berkunci duplikat, dan JSON yang tertanam di YAML memerlukan validator spesifik format alih-alih parser JSON standar.
- Validasi JSON saat ingest, bukan saat konsumsi - tolak data tidak valid di titik masuk sebelum menyebar ke dalam sistem Anda.