Apa Itu JSON? Sintaks, Error Umum, dan Cara Validasinya

JSON (JavaScript Object Notation) adalah format berbasis teks yang ringan untuk menyimpan dan menukar data terstruktur, dibangun dari objek berisi pasangan key/value, array berurutan, dan beberapa tipe nilai: string, angka, true, false, dan null. JSON menjadi format default untuk API web dan banyak file konfigurasi karena mudah dibaca manusia dan sederhana untuk di-parse oleh semua bahasa pemrograman. JSON bersifat ketat: key dan string wajib memakai tanda kutip ganda, sedangkan koma di akhir dan komentar tidak diperbolehkan.

Poin penting
  • JSON memiliki tepat enam jenis nilai: objek, array, string, angka, boolean (true/false), dan null.
  • Key harus berupa string dalam tanda kutip ganda; tanda kutip tunggal tidak pernah valid.
  • Tidak boleh ada koma di akhir, komentar, undefined, NaN, atau Infinity.
  • Sebagian besar error "invalid JSON" disebabkan oleh koma yang hilang atau berlebih, tanda kutip yang salah, atau karakter dalam string yang tidak di-escape.
  • Validasi sintaks dulu dengan parser yang ketat, lalu validasi struktur dengan JSON Schema jika diperlukan.

Seperti apa tampilan JSON

JSON berkembang dari sintaks yang dipakai JavaScript untuk object literal, tetapi tidak terikat pada bahasa tertentu. JSON didefinisikan dalam RFC 8259 dan standar ECMA-404, dan ringkasan satu halaman di json.org menjelaskan seluruh tata bahasanya. Dokumen JSON yang umum terlihat seperti ini:

{
  "id": 1042,
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "active": true,
  "score": 98.5,
  "manager": null,
  "roles": ["admin", "editor"],
  "address": {
    "city": "London",
    "postcode": "N1 9GU"
  }
}

Spasi di antara elemen (spasi, tab, dan baris baru) diabaikan, sehingga data yang sama bisa ditulis dalam satu baris atau dibentangkan dengan indentasi. Tingkat teratas dokumen JSON dapat berupa nilai apa pun, meskipun API hampir selalu memakai objek atau array.

Tipe data JSON

TipeContohAturan
Objek{"a": 1, "b": 2}Kumpulan pasangan key/value yang tidak berurutan dalam kurung kurawal. Key berupa string; titik dua memisahkan key dan value; koma memisahkan antarpasangan.
Array[1, "two", false]Daftar nilai berurutan dalam kurung siku, dipisahkan dengan koma. Nilainya boleh bertipe campuran.
String"caf\u00e9 \"quoted\""Hanya tanda kutip ganda. Escape dengan backslash: \" \\ \/ \b \f \n \r \t dan \uXXXX. Baris baru dan tab mentah di dalam string tidak diperbolehkan.
Angka-12, 3.14, 6.02e23Hanya desimal. Tanpa + di depan, tanpa nol di depan (07), tanpa heksadesimal, tanpa NaN atau Infinity. Titik desimal harus memiliki angka di kedua sisinya.
Booleantrue, falseHuruf kecil, tanpa tanda kutip.
NullnullHuruf kecil, tanpa tanda kutip. Mewakili nilai kosong atau tidak diketahui.

JSON tidak memiliki tipe tanggal. Tanggal biasanya ditulis sebagai string dalam format ISO 8601, seperti "2026-10-13T09:30:00Z", atau sebagai Unix timestamp berupa angka; Konverter Unix Timestamp kami dapat mengubah keduanya bolak-balik.

Angka dan presisi

Standar JSON tidak membatasi ukuran atau presisi angka, tetapi program yang membacanya punya batas. JavaScript menyimpan angka sebagai nilai floating point 64-bit, sehingga bilangan bulat yang lebih besar dari 9.007.199.254.740.991 (253 − 1) bisa kehilangan presisi tanpa peringatan. Untuk ID yang besar, banyak API mengirimkannya sebagai string, misalnya "id": "1234567890123456789".

Aturan yang sering membuat orang tersandung

JSON mirip dengan JavaScript, dictionary Python, dan YAML, dan itulah sebabnya orang tanpa sengaja menulis JSON yang tidak valid. Aturan berikut tidak punya pengecualian dalam JSON standar:

  • Key harus berupa string dalam tanda kutip ganda. {name: "Ada"} valid dalam JavaScript tetapi tidak valid sebagai JSON; tulis {"name": "Ada"}.
  • Hanya tanda kutip ganda. 'Ada' bukan string JSON.
  • Tanpa koma di akhir. [1, 2, 3,] dan {"a": 1,} tidak valid.
  • Tanpa komentar. Baik // ... maupun /* ... */ tidak diperbolehkan.
  • Nilai literal berhuruf kecil. True, FALSE, dan None (penulisan di Python) tidak valid; gunakan true, false, dan null.
  • Tanpa undefined, fungsi, atau angka khusus. Semuanya ada di JavaScript tetapi tidak punya padanan di JSON.
  • Key sebaiknya unik. Standar menyebutkan bahwa nama dalam satu objek sebaiknya unik; jika ada duplikat, perilaku parser berbeda-beda, dan banyak yang diam-diam hanya menyimpan yang terakhir.

Beberapa tool menerima varian yang lebih longgar. File seperti settings.json di VS Code dan tsconfig.json di TypeScript dibaca dengan parser yang mengizinkan komentar (sering disebut JSONC), dan JSON5 mengizinkan komentar, tanda kutip tunggal, dan koma di akhir. Itu adalah format tersendiri: parser JSON standar, termasuk yang dipakai klien API atau server Anda, akan menolaknya.

Error JSON yang umum dan cara memperbaikinya

Bunyi pesan error berbeda-beda di tiap parser. Tabel ini menunjukkan jenis pesan yang akan Anda lihat dari modul json Python atau JSON.parse di browser, arti yang biasanya terkandung, dan perbaikannya. Posisi yang dilaporkan sering menunjuk tepat setelah kesalahan sebenarnya, jadi periksa juga karakter sebelumnya.

MasalahPesan error yang umumPerbaikan
Koma di akhir: {"a": 1,}"Expecting property name enclosed in double quotes" atau "Unexpected token }"Hapus koma setelah item terakhir di objek atau array.
Key tanpa tanda kutip atau dengan kutip tunggal: {a: 1}, {'a': 1}"Expecting property name enclosed in double quotes" atau "Expected double-quoted property name"Apit setiap key dengan tanda kutip ganda.
Nilai string dengan kutip tunggal: {"a": 'x'}"Expecting value" atau "Unexpected token '"Gunakan tanda kutip ganda, dan escape tanda kutip ganda di dalamnya sebagai \".
Koma hilang di antara item"Expecting ',' delimiter" atau "Expected ',' or '}' after property value"Tambahkan koma di antara dua nilai atau pasangan pada baris yang dilaporkan.
Komentar di dalam file"Expecting value" atau "Unexpected token /"Hapus komentar, atau pindahkan catatan itu ke field data seperti "_comment".
Literal Python atau JavaScript: True, None, undefined, NaN"Expecting value" atau "Unexpected token"Gunakan true, false, atau null; serialisasikan data dengan library JSON yang sebenarnya, bukan dengan mencetaknya.
Baris baru atau tab mentah di dalam string"Invalid control character" atau "Bad control character in string literal"Ganti dengan \n atau \t.
Backslash yang tidak di-escape, seperti path Windows "C:\new""Invalid \escape" atau "Bad escaped character"Gandakan backslash-nya: "C:\\new".
Kurung atau tanda kutip penutup hilang"Unterminated string" atau "Unexpected end of JSON input"Pastikan setiap {, [, dan " sudah ditutup; indentasi dari formatter membuat bagian yang kosong mudah terlihat.
Dua dokumen berurutan, atau ada teks setelah akhir dokumen"Extra data" atau "Unexpected non-whitespace character after JSON"Bungkus beberapa objek dalam sebuah array, atau proses input sebagai JSON Lines (satu dokumen per baris).
Respons kosong atau halaman error HTML yang di-parse sebagai JSON"Expecting value: line 1 column 1" atau "Unexpected token <"Periksa status HTTP dan isi respons; server mengembalikan sesuatu selain JSON.

Baris terakhir adalah salah satu yang paling sering terjadi dalam praktik: kode memanggil JSON.parse atau response.json() pada halaman error yang diawali <!DOCTYPE html>, dan < dilaporkan sebagai token tak terduga.

JSON vs YAML vs XML

JSONYAMLXML
StrukturKurung kurawal dan kurung sikuIndentasiTag pembuka dan penutup
KomentarTidakYa (#)Ya (<!-- -->)
Tipe dataString, angka, boolean, null, objek, arraySerupa, ditambah tanggal dan tipe lain tergantung parserSemuanya teks kecuali skema menetapkan tipe
Atribut dan konten campuranTidakTidakYa
KeringkasanRingkasPaling ringkas dibacaPaling panjang
Kegunaan umumAPI web, penyimpanan browser, manifes paket, logKonfigurasi: Kubernetes, Docker Compose, pipeline CIDokumen, SOAP, RSS dan Atom, sitemap, format file office
Kelemahan utamaAturan kutip dan koma yang ketatPeka terhadap spasi; beberapa nilai tanpa kutip ditafsirkan di luar dugaanBertele-tele; namespace dan entity menambah kerumitan

YAML 1.2 dirancang agar dokumen JSON, kecuali pada kasus tepi yang jarang, juga merupakan YAML yang valid, sehingga konversi di antara keduanya mudah dilakukan. Konverter JSON ↔ YAML kami menangani kedua arah, YAML Formatter & Validator dan XML Formatter & Validator memvalidasi dua format lainnya, dan Konverter CSV ↔ JSON mengubah ekspor spreadsheet menjadi array objek.

Pretty-print dan minify

Karena spasi tidak berpengaruh, JSON yang sama bisa diformat untuk manusia atau untuk mesin:

  • JSON pretty-printed menambahkan baris baru dan indentasi, biasanya dua atau empat spasi, sehingga tingkat penyarangan terlihat. Gunakan untuk file konfigurasi, dokumentasi, dan debugging.
  • JSON minified membuang semua spasi opsional agar payload lebih kecil. Gunakan untuk data yang dikirim lewat jaringan atau disimpan dalam jumlah besar; kompresi HTTP juga mengecilkan ukuran, jadi penghematannya sering kecil.
{"name":"Ada","roles":["admin","editor"],"active":true}

Kebanyakan bahasa pemrograman dapat melakukan keduanya. Di JavaScript, JSON.stringify(data, null, 2) melakukan pretty-print dengan indentasi dua spasi dan JSON.stringify(data) melakukan minify. Di Python, json.dumps(data, indent=2) melakukan pretty-print dan json.dumps(data, separators=(",", ":")) menghasilkan output paling ringkas.

Cara memvalidasi JSON

Validasi JSON punya dua tingkat: apakah teksnya valid secara sintaks sebagai JSON, dan apakah strukturnya sesuai dengan yang diharapkan aplikasi Anda.

  1. Periksa sintaks dengan parser yang ketat. Tempel teks ke JSON Formatter & Validator kami, yang melaporkan baris dan kolom error pertama dan berjalan di browser Anda. Di command line, python3 -m json.tool data.json atau jq . data.json menampilkan dokumen yang sudah diformat atau pesan error.
  2. Perbaiki error satu per satu. Parser berhenti pada masalah pertama, jadi jalankan ulang setelah setiap perbaikan sampai berhasil.
  3. Periksa strukturnya. Pastikan field wajib ada dan bertipe benar, baik lewat kode maupun dengan validator JSON Schema.
  4. Periksa encoding-nya. JSON yang dipertukarkan antarsistem sebaiknya berencoding UTF-8. File yang disimpan dengan encoding lain bisa menghasilkan karakter aneh atau error pada teks non-Inggris.

Sekilas tentang JSON Schema

JSON Schema adalah kosakata, yang ditulis dalam JSON itu sendiri, untuk menggambarkan seperti apa dokumen yang valid: properti mana yang wajib, tipe tiap properti, nilai yang diizinkan, pola string, rentang angka, dan seterusnya. Validator tersedia untuk sebagian besar bahasa, dan format deskripsi API seperti OpenAPI memakai JSON Schema untuk menjelaskan isi request dan response. Spesifikasinya dipublikasikan di json-schema.org. Contoh singkat:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["id", "email"],
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "roles": { "type": "array", "items": { "type": "string" } }
  }
}

Dokumen tanpa email atau dengan id berupa string tetap merupakan JSON yang valid, tetapi tidak lolos skema ini. Perlu diingat bahwa banyak validator memperlakukan format sebagai anotasi dan tidak menegakkannya kecuali dikonfigurasi.

Pertanyaan yang sering diajukan

Bisakah JSON memiliki komentar?

Tidak. JSON standar tidak mengizinkan komentar dalam bentuk apa pun. Beberapa tool menerima JSONC atau JSON5 yang mengizinkannya, tetapi file yang akan dibaca program lain sebaiknya tetap memakai JSON biasa. Jika perlu catatan, tambahkan field seperti "_comment".

Mengapa JSON tidak mengizinkan koma di akhir?

Tata bahasanya sengaja dibuat sangat minimal dan memang tidak memuatnya. Banyak engine JavaScript dan bahasa lain menerima koma di akhir dalam sintaksnya sendiri, itulah sebabnya koma semacam itu sering muncul secara keliru di JSON yang ditulis manual.

Apa perbedaan JSON dengan objek JavaScript?

JSON adalah format teks; objek JavaScript adalah struktur data di memori. Sintaks JSON adalah subset yang lebih ketat dari sintaks literal JavaScript. Anda mengonversi di antara keduanya dengan JSON.parse dan JSON.stringify.

Apa arti "Unexpected token < in JSON at position 0"?

Teks yang di-parse diawali dengan <, yang hampir selalu berarti Anda menerima HTML, seperti halaman error atau halaman login, bukan JSON. Periksa URL request, kode status HTTP, dan isi respons mentahnya.

Apakah urutan key dalam objek JSON dipertahankan?

Standar memperlakukan objek sebagai tidak berurutan, jadi Anda sebaiknya tidak bergantung pada urutan key. Dalam praktiknya sebagian besar parser modern mempertahankan urutan yang dibaca, tetapi urutan array adalah satu-satunya urutan yang dijamin JSON.

Ekstensi file dan tipe MIME apa yang dipakai JSON?

File memakai ekstensi .json dan media type-nya adalah application/json, sebagaimana terdaftar dalam RFC 8259.

Coba sendiri

Praktikkan panduan ini dengan alat gratis kami.

Baca juga

Tersalin ke clipboard