AI Insights
Generate a summary and suggested tags for this post.
JSON (JavaScript Object Notation) adalah format pertukaran data berbasis teks yang ringan, mudah dibaca manusia, sekaligus mudah diproses oleh mesin. Meski namanya mengandung "JavaScript", JSON bersifat language-independent — hampir semua bahasa pemrograman modern seperti Python, PHP, Java, Go, hingga Rust punya dukungan bawaan untuk membaca dan menulis JSON.
Di artikel ini kita akan bahas JSON dari nol: sejarah singkat, aturan sintaks, tipe data, contoh penggunaan nyata, cara memproses JSON di berbagai bahasa, hingga tips keamanan dan performa.
1. Sejarah singkat JSON
JSON pertama kali dipopulerkan oleh Douglas Crockford pada awal tahun 2000‑an sebagai subset dari sintaks literal objek di JavaScript. Tujuannya sederhana: menyediakan format pertukaran data yang lebih ringan daripada XML.
Sebelum JSON, XML mendominasi komunikasi antar sistem — mulai dari SOAP web service sampai file konfigurasi. Tapi XML dianggap terlalu verbose: setiap data harus dibungkus tag pembuka dan penutup, sehingga ukuran payload cepat membengkak dan sulit dibaca sekilas.
JSON hadir sebagai alternatif yang jauh lebih ringkas dan cepat menjadi standar de‑facto untuk REST API, konfigurasi aplikasi, hingga penyimpanan data sederhana. Pada tahun 2013, JSON resmi distandardisasi lewat ECMA‑404 dan RFC 8259.
2. Kenapa JSON begitu populer?
Ada beberapa alasan mengapa JSON menjadi format nomor satu di dunia web modern:
- Ringan — sintaksnya minim, ukuran payload jauh lebih kecil dibanding XML.
- Mudah dibaca — strukturnya menyerupai objek di banyak bahasa pemrograman.
- Universal — didukung hampir semua bahasa dan framework tanpa library tambahan.
- Native di browser — JavaScript bisa mem‑parsing JSON tanpa dependensi apa pun.
- Cocok untuk API — sebagian besar REST API dan sebagian besar respons GraphQL berbasis JSON.
- Ramah developer tools — bisa langsung di‑pretty print, di‑diff, dan di‑version control.
Perbandingan singkat JSON vs XML supaya jelas kenapa JSON menang di era web modern:
| Aspek | JSON | XML |
|---|---|---|
| Sintaks | Ringkas, mirip objek | Verbose, banyak tag |
| Ukuran payload | Kecil | 30–60% lebih besar |
| Tipe data | 6 tipe eksplisit | Semua string (perlu skema) |
| Parsing di browser | Native (JSON.parse) | Perlu DOM parser |
| Komentar | Tidak didukung | Didukung |
| Skema/validasi | JSON Schema | XSD / DTD |
| Cocok untuk | REST API, konfigurasi | Dokumen kaya, SOAP legacy |
3. Tipe data yang dikenali JSON
JSON hanya mengenal enam tipe data. Semua struktur data — sekompleks apa pun — dibangun dari kombinasi enam tipe ini:
| Tipe | Contoh | Keterangan |
|---|---|---|
| string | "Hello" | Wajib pakai kutip ganda. |
| number | 42, 3.14, -7 | Tidak ada perbedaan int/float. |
| boolean | true, false | Huruf kecil semua. |
| null | null | Merepresentasikan nilai kosong. |
| object | { "key": "value" } | Kumpulan pasangan key–value. |
| array | [1, 2, 3] | Daftar terurut dari nilai. |
Yang tidak ada di JSON: undefined, function, Date, BigInt, NaN, Infinity, dan komentar. Nilai‑nilai ini harus dikonversi lebih dulu (biasanya menjadi string atau number).
4. Struktur dasar JSON
Berikut contoh JSON yang menggabungkan semua tipe data di atas:
{
"name": "Faiz",
"age": 25,
"isDeveloper": true,
"skills": ["JavaScript", "TypeScript", "React"],
"address": {
"city": "Jakarta",
"country": "Indonesia",
"postalCode": "12345"
},
"website": null
}Beberapa aturan penting yang wajib diingat:
- Key harus berupa string dan dibungkus tanda kutip ganda (
"). - String juga wajib pakai kutip ganda — kutip tunggal
'tidak valid. - Tidak boleh ada trailing comma setelah elemen terakhir.
- Tidak boleh ada komentar (
//atau/* */) di JSON standar. - Angka tidak boleh diawali
+atau memiliki angka nol di depan (kecuali0itu sendiri). - Nested tidak terbatas — object dan array boleh saling bersarang sedalam apa pun.
5. JSON vs JavaScript Object — apa bedanya?
Ini kebingungan paling umum bagi pemula. JSON terlihat mirip objek JavaScript, tapi keduanya berbeda:
// JavaScript Object — key tidak wajib pakai kutip
const user = {
name: 'Faiz',
age: 25,
greet() { return 'hi'; }, // boleh ada function
};
// JSON — key WAJIB pakai kutip ganda, tidak boleh function
{
"name": "Faiz",
"age": 25
}Aturannya:
- Semua JSON valid hampir selalu juga JavaScript valid.
- Tapi tidak semua objek JavaScript adalah JSON valid.
Ringkasan perbedaan JSON dan JavaScript Object:
| Aspek | JSON | JavaScript Object |
|---|---|---|
| Format | Teks (string) | Struktur di memori |
| Key | Wajib string berkutip ganda | Boleh identifier tanpa kutip |
| Kutip string | Hanya "..." | Boleh '...', ... |
| Trailing comma | Tidak boleh | Boleh |
| Function/method | Tidak boleh | Boleh |
| Tipe khusus (Date, BigInt) | Tidak dikenal | Didukung |
| Komentar | Tidak boleh | Boleh |
6. Contoh penggunaan sehari‑hari
a. Response dari REST API
Saat kamu memanggil GET /api/users/1, server umumnya membalas dengan JSON:
{
"id": 1,
"username": "faiz",
"email": "faiz@example.com",
"roles": ["admin", "editor"],
"createdAt": "2026-07-15T10:30:00Z"
}b. File konfigurasi
Banyak tool memakai JSON untuk konfigurasi — package.json di Node.js, tsconfig.json di TypeScript, atau .vscode/settings.json di VS Code.
{
"name": "my-app",
"version": "1.0.0",
"scripts": {
"dev": "vite",
"build": "vite build",
"test": "vitest"
}
}c. Menyimpan data lokal
JSON sering dipakai untuk localStorage di browser atau file .json di disk.
localStorage.setItem("prefs", JSON.stringify({ theme: "dark", lang: "id" }));
const prefs = JSON.parse(localStorage.getItem("prefs") ?? "{}");d. Payload untuk webhook & message queue
Layanan seperti Stripe, GitHub, dan Slack mengirim event lewat webhook dalam format JSON.
7. Cara memproses JSON di berbagai bahasa
JavaScript / TypeScript
// String JSON -> objek JavaScript
const data = JSON.parse('{"name":"Faiz","age":25}');
// Objek JavaScript -> string JSON
const json = JSON.stringify({ name: "Faiz", age: 25 });
// Pretty print dengan indentasi 2 spasi
console.log(JSON.stringify(data, null, 2));Selalu bungkus JSON.parse dengan try/catch — input tidak valid akan melempar SyntaxError dan bisa membuat aplikasi crash.
Python
import json
# String -> dict
data = json.loads('{"name":"Faiz","age":25}')
# dict -> string
raw = json.dumps({"name": "Faiz", "age": 25}, indent=2)PHP
$data = json_decode('{"name":"Faiz"}', true); // array asosiatif
$json = json_encode(["name" => "Faiz"]);Go
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
var u User
json.Unmarshal([]byte(`{"name":"Faiz","age":25}`), &u)
b, _ := json.Marshal(u)Ringkasan API parsing/serializing di beberapa bahasa populer:
| Bahasa | String → Data | Data → String | Catatan |
|---|---|---|---|
| JavaScript / TypeScript | JSON.parse(str) | JSON.stringify(obj) | Native, bungkus dengan try/catch |
| Python | json.loads(str) | json.dumps(obj) | Modul json standar |
| PHP | json_decode($str, true) | json_encode($data) | Argumen kedua true = array asosiatif |
| Go | json.Unmarshal(b, &v) | json.Marshal(v) | Butuh struct tag json:"..." |
| Java | objectMapper.readValue(...) | objectMapper.writeValueAsString(...) | Pakai Jackson / Gson |
| Rust | serde_json::from_str(...) | serde_json::to_string(...) | Butuh crate serde |
| C# / .NET | JsonSerializer.Deserialize<T>(str) | JsonSerializer.Serialize(obj) | Namespace System.Text.Json |
8. Kesalahan umum saat menulis JSON
- Menaruh trailing comma setelah elemen terakhir.
- Memakai kutip tunggal untuk string.
- Menulis komentar
//atau/* */— JSON standar tidak mendukung. - Lupa membungkus key dengan kutip ganda.
- Menggunakan tipe data tidak valid seperti
undefinedataufunction. - Menulis angka dengan format tidak valid:
.5(harus0.5) atau01(harus1). - Menaruh nilai
NaNatauInfinity— tidak valid di JSON.
Contoh kesalahan sintaks JSON yang paling sering terjadi:
| Kesalahan | Contoh salah | Contoh benar |
|---|---|---|
| Trailing comma | { "a": 1, } | { "a": 1 } |
| Kutip tunggal | { 'a': 1 } | { "a": 1 } |
| Key tanpa kutip | { a: 1 } | { "a": 1 } |
| Komentar | { "a": 1 // ok } | Hapus komentarnya |
| Angka tidak valid | { "a": .5 } | { "a": 0.5 } |
NaN/Infinity | { "a": NaN } | { "a": null } atau string |
undefined/function | { "a": undefined } | Hilangkan atau ganti null |
9. Tips keamanan & performa
- Selalu validasi input JSON dari luar — jangan pernah percaya data user. Gunakan library validasi seperti Zod, Joi, atau Yup.
- Batasi ukuran payload di server untuk mencegah serangan denial of service.
- Hindari JSON super dalam / super lebar — parsing bisa lambat dan boros memori.
- Jangan gunakan
eval()untuk mem‑parse JSON. Selalu pakaiJSON.parse. - Streaming JSON untuk file besar — pakai library seperti
stream-json(Node) atauijson(Python) supaya tidak memuat seluruh file ke memori. - Gunakan JSON minified di produksi, JSON pretty‑printed hanya di development.
10. Format terkait yang perlu kamu tahu
- JSONL (JSON Lines) — satu objek JSON per baris. Cocok untuk log dan streaming data.
- JSON5 — superset JSON yang mengizinkan komentar dan trailing comma. Sering dipakai untuk file konfigurasi.
- NDJSON — mirip JSONL, populer di dunia data engineering.
- JSON Schema — cara mendeskripsikan dan memvalidasi struktur JSON.
- JSONP — teknik lama untuk cross‑domain request; sudah jarang dipakai, digantikan CORS.
Ringkasan format turunan JSON dan kapan dipakai:
| Format | Deskripsi | Komentar? | Trailing comma? | Kapan dipakai |
|---|---|---|---|---|
| JSON | Standar (RFC 8259) | ❌ | ❌ | API, config umum |
| JSONL / NDJSON | Satu objek JSON per baris | ❌ | ❌ | Log, streaming data |
| JSON5 | Superset ramah manusia | ✅ | ✅ | File konfigurasi |
| JSON Schema | Skema untuk validasi | ❌ | ❌ | Kontrak API, validasi input |
| JSONP | JSON + callback function | — | — | Legacy cross‑domain (dihindari) |
| BSON | JSON biner | ❌ | ❌ | Penyimpanan MongoDB |
Kesimpulan
JSON adalah "bahasa universal" untuk bertukar data di dunia web modern. Sintaksnya sederhana, mudah dipelajari dalam hitungan menit, tapi kekuatannya luar biasa — mulai dari komunikasi antar‑server, konfigurasi aplikasi, hingga menyimpan preferensi pengguna.
Yang perlu kamu kuasai untuk mahir JSON:
- Enam tipe data dasar dan aturan sintaksnya.
- Cara parsing & serializing di bahasa yang kamu pakai.
- Cara validasi data JSON dari sumber tidak terpercaya.
- Kesalahan umum dan cara menghindarinya.
- Format turunan seperti JSONL, JSON5, dan JSON Schema.
Kalau kamu serius belajar web development, menguasai JSON adalah salah satu fondasi wajib yang akan kamu pakai setiap hari — dari memanggil API pertama sampai membangun sistem terdistribusi.
