← Semua pembelajaran / Python Dasar
Fase 6 · String, File & Error

JSON — Menyimpan Data Terstruktur

File teks biasa cukup untuk daftar sederhana. Begitu datamu berupa dictionary bersarang, JSON adalah jawabannya.

Sumber asli docs.python.org Resmi Rangkuman ~4 menit baca

Intisari

  • Empat perintah saja: json.dump (ke file), json.load (dari file), json.dumps/loads (ke/dari teks).
  • Ingat huruf s = string. Tanpa s berarti berurusan dengan file.
  • Selalu tambahkan ensure_ascii=False supaya huruf non-Inggris tersimpan apa adanya.
  • indent=2 membuat 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

PerintahDariKe
json.dump(data, f)Objek PythonFile
json.load(f)FileObjek Python
json.dumps(data)Objek PythonTeks
json.loads(teks)TeksObjek 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)
ParameterTanpa ituDengan itu
indent=2Semua di satu baris panjangBertingkat rapi, mudah dibaca
ensure_ascii=False"José""José"

Padanan tipe data

PythonJSON
dictobject { }
list, tuplearray [ ]
strstring
int, floatnumber
True / Falsetrue / false
Nonenull

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.