Format JSON — API

JSON (JavaScript Object Notation) adalah format data standar untuk API modern. Syntax JSON: { "name": "Budi", "age": 25, "active": true, "address": null…

JSON (JavaScript Object Notation) adalah format teks untuk mengirim data. Hampir semua API web memakainya, termasuk API Toko Buku. Bentuknya mirip object JavaScript, tapi aturannya jauh lebih ketat. Bayangin formulir resmi: tiap isian punya label yang ditulis persis, dan kalau satu tanda saja salah, petugasnya menolak seluruh formulir. JSON.parse adalah petugas itu.

🧪 Tebakan cepat: {"title": "Laskar Pelangi", "price": 89000,} itu sah, atau ditolak? Tebak dulu, jawabannya ada di bagian "Aturan yang bikin JSON.parse menolak".

Enam jenis nilai

Ini body GET /books/1 versi lengkap dari API Toko Buku:

{
  "id": 1,
  "title": "Laskar Pelangi",
  "price": 89000,
  "in_stock": true,
  "discount": null,
  "tags": ["novel", "pendidikan"],
  "author": { "id": 1, "name": "Andrea Hirata" }
}
Jenis Contoh Catatan
string "Laskar Pelangi" selalu kutip ganda
number 89000, 4.5 tanpa kutip, tanpa titik ribuan, desimal pakai titik
boolean true, false huruf kecil
null null sengaja kosong
array ["novel", "pendidikan"] daftar berurutan, pakai [ ]
object {"id": 1, "name": "Andrea Hirata"} pasangan key dan nilai, pakai { }

Nilai boleh berisi nilai lain. tags adalah array di dalam object, author adalah object di dalam object. Data yang bersarang (nested) seperti ini yang diminta latihan.

Aturan yang bikin JSON.parse menolak

Jadi {"title": "Laskar Pelangi", "price": 89000,} ditolak, karena ada koma setelah 89000. Itu jawaban tebakannya. Chrome menulis alasannya begini:

SyntaxError: Expected double-quoted property name in JSON at position 43 (line 1 column 44)

Setelah koma, JSON.parse menunggu key baru dalam kutip ganda, tapi di posisi 43 yang datang }. Firefox dan Safari menulis pesannya dengan kata lain, tapi sama-sama menolak.

JSON Masalahnya
{nama: "Budi", umur: 17} key harus pakai kutip
{"nama": "Budi", "umur": 17,} koma terakhir
{"nama": 'Budi', "umur": 17} string pakai kutip tunggal

Object JavaScript bukan JSON

Di kode JavaScript, object boleh ditulis santai: key tanpa kutip, kutip tunggal, koma terakhir. JSON adalah teks yang dikirim lewat jaringan. Dua function bawaan menjembatani keduanya:

const book = { title: 'Laskar Pelangi', price: 89000, discount: undefined };

const text = JSON.stringify(book);
console.log(text); // {"title":"Laskar Pelangi","price":89000}

const back = JSON.parse(text);
console.log(back.price); // 89000

res.json(object) di Express memanggil JSON.stringify untukmu. Itu sebabnya di latihan kamu boleh menulis key tanpa kutip: yang kamu tulis object JavaScript, yang terkirim JSON.

Header Content-Type: application/json

Body JSON selalu ditemani header Content-Type: application/json, baik di request maupun di response. Header itu bilang "isi body ini JSON, baca pakai aturan JSON". res.json(...) memasangnya otomatis. Waktu mengirim JSON dari client, kamu yang menulisnya sendiri (dibahas di pelajaran Request & Response).

Latihan: GET /profile

Bentuknya seperti detail buku ini:

app.get("/books/1", (req, res) => {
  res.json({
    id: 1,
    title: "Laskar Pelangi",
    tags: ["novel", "pendidikan"],
    author: { id: 1, name: "Andrea Hirata" },
  });
});

Di latihan, endpoint-nya GET /profile, berisi name, age, skills (array tiga teks), dan address (object berisi city dan country).

⚠️ Jebakan yang sering ketemu

TL;DR: JSON adalah format teks untuk data, dengan enam jenis nilai: string (kutip ganda), number, boolean, null, array [ ], dan object { }, yang boleh bersarang. JSON.parse menolak key tanpa kutip, kutip tunggal, koma terakhir, komentar, undefined, dan angka berawalan nol. Object JavaScript bukan JSON: JSON.stringify mengubah object jadi teks JSON, JSON.parse mengembalikannya, dan res.json melakukannya untukmu. Body JSON dikirim dengan header Content-Type: application/json.

Yang akan kamu pelajari