JSON — Menyimpan Data Terstruktur
File teks biasa cukup untuk daftar sederhana. Begitu datamu berupa dictionary bersarang, JSON adalah jawabannya.
Intisari
- Empat perintah saja:
json.dump(ke file),json.load(dari file),json.dumps/loads(ke/dari teks). - Ingat huruf s = string. Tanpa
sberarti berurusan dengan file. - Selalu tambahkan
ensure_ascii=Falsesupaya huruf non-Inggris tersimpan apa adanya. indent=2membuat filenya terbaca manusia — pakai saja untuk data yang mungkin kamu buka manual.- Tuple berubah jadi list setelah bolak-balik JSON. Kunci dictionary selalu jadi teks.
Masalahnya
data = {"nama": "Budi", "nilai": [85, 90], "aktif": True}
with open("data.txt", "w") as f:
f.write(str(data)) # tersimpan sebagai teks apa adanya
Saat dibaca lagi, yang kamu dapat cuma teks "{'nama': 'Budi', ...}" — bukan dictionary.
Strukturnya hilang. JSON menyelesaikan ini: ia menyimpan struktur datanya, bukan cuma tampilannya.
Menyimpan ke file
import json
data = {"nama": "Budi", "nilai": [85, 90], "aktif": True}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
Isi data.json:
{
"nama": "Budi",
"nilai": [85, 90],
"aktif": true
}
Membaca kembali
with open("data.json", encoding="utf-8") as f:
data = json.load(f)
print(data["nama"]) # Budi
print(type(data)) # <class 'dict'> ← dictionary utuh, bukan teks
Empat perintah
| Perintah | Dari | Ke |
|---|---|---|
json.dump(data, f) | Objek Python | File |
json.load(f) | File | Objek Python |
json.dumps(data) | Objek Python | Teks |
json.loads(teks) | Teks | Objek Python |
Cara mengingatnya: huruf s di ujung berarti string.
dumps/loads bekerja dengan teks di memori;
dump/load langsung ke dan dari file.
Dua parameter yang selalu layak dipakai
json.dump(data, f, indent=2, ensure_ascii=False)
| Parameter | Tanpa itu | Dengan itu |
|---|---|---|
indent=2 | Semua di satu baris panjang | Bertingkat rapi, mudah dibaca |
ensure_ascii=False | "José" | "José" |
Padanan tipe data
| Python | JSON |
|---|---|
dict | object { } |
list, tuple | array [ ] |
str | string |
int, float | number |
True / False | true / false |
None | null |
Perjalanan sekali arah. Tuple disimpan sebagai array dan kembali sebagai list.
Kunci dictionary yang berupa angka kembali sebagai teks. Kalau ini penting untukmu, hindari
memakai tuple atau kunci non-teks pada data yang akan di-JSON-kan.
Contoh utuh: buku kontak permanen
import json
from pathlib import Path
FILE = Path("kontak.json")
def muat():
"""Baca kontak dari file; kembalikan dict kosong kalau belum ada."""
if not FILE.exists():
return {}
return json.loads(FILE.read_text(encoding="utf-8"))
def simpan(kontak):
"""Tulis seluruh kontak ke file dalam bentuk JSON."""
FILE.write_text(
json.dumps(kontak, indent=2, ensure_ascii=False),
encoding="utf-8",
)
kontak = muat()
nama = input("Nama: ").strip()
kontak[nama] = input("Nomor: ").strip()
simpan(kontak)
print(f"Tersimpan. Total {len(kontak)} kontak.")
File JSON rusak
try:
data = json.loads(FILE.read_text(encoding="utf-8"))
except json.JSONDecodeError:
print("File rusak, mulai dari kosong.")
data = {}
Ini terjadi kalau file pernah tersimpan setengah jalan, atau diedit manual lalu salah tanda baca.
Latihan: ubah aplikasi daftar tugas dari Fase 4 supaya menyimpan ke JSON, dengan tiap tugas
berupa dictionary {"teks": ..., "selesai": false}. Tambahkan menu untuk menandai
tugas sebagai selesai.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.