Lompati ke konten utama
Modul 8 · Pelajaran 1 dari 429/36 dalam kursus~10 min
Pelajaran modul (1/4)

JSON: membuat serial dan parsing

JSON adalah format pertukaran data yang paling luas. Modul json di perpustakaan standar menanganinya secara asli.

Dari Python ke JSON: dumps

json.dumps(object) membuat serial objek Python menjadi string JSON.

Python
import json

dati = {"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}
json.dumps(dati)
# '{"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}'

json.dumps(dati, indent=2, sort_keys=True)
# multi-line formatted string, keys sorted

Dari JSON ke Python: loads

json.loads(string) mem-parsing string JSON dan mengembalikan objek Python.

Python
testo = '{"nome": "Ada", "anni": 36}'
d = json.loads(testo)
d["nome"]    # 'Ada'
type(d)      # <class 'dict'>

Ketik pemetaan

JSONular piton
objectdict
arraylist
stringstr
numberint / float
trueTrue
falseFalse
nullNone

Dari berkas: dump / load

Python
with open("config.json", "w") as f:
    json.dump(dati, f, indent=2)

with open("config.json") as f:
    dati = json.load(f)

Tanpa akhiran "s" mereka bekerja pada file (seperti file), dengan "s" pada string.

Jenis yang tidak dapat diserialkan: default

datetime, set, kelas khusus Anda tidak dapat diserialkan secara default:

Python
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializable

Anda dapat meneruskan fungsi default yang memberitahukan cara mengubahnya:

Python
def converti(obj):
    if isinstance(obj, datetime.datetime):
        return obj.isoformat()
    if isinstance(obj, set):
        return list(obj)
    raise TypeError(f"non serializzabile: {type(obj)}")

json.dumps({"ora": datetime.datetime.now()}, default=converti)

JSON dan operasi file

Pustaka standar juga menyediakan json.dump() dan json.load() (tanpa 's') untuk menulis dan membaca data JSON langsung ke dan dari file, berpasangan secara alami dengan pengelola konteks:

Python
with open("data.json", "w") as f:
    json.dump(data, f)

Cobalah

Latihan#python.m8.l1.e1
Upaya: 0Memuat…

Diberikan `data = {'nome': 'Ada', 'anni': 36}`, buat serial ke JSON dengan indent=2 dan tetapkan ke variabel `json_str`. Evaluasi `json_str`.

Memuat editor…
Tunjukkan petunjuk

json.dumps(data, indent=2)

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#python.m8.l1.e2
Upaya: 0Memuat…

Mengingat string JSON s = '[{"nome": "a", "v": 1}, {"nome": "b", "v": 2}]', parsing dengan json.loads ke dalam data dan hitung jumlah total nilai 'v'. Evaluasi totalnya.

Memuat editor…
Tunjukkan petunjuk

json.loads mengembalikan daftar dicts.

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#python.m8.l1.e3
Upaya: 0Memuat…

Mengingat string JSON \`json_data = '{"name": "Alice", "age": 30}'\`, dekodekan ke dalam kamus Python menggunakan \`json.loads\`. Ekstrak nilai yang terkait dengan kunci \`'nama'\` dan simpan di \`nama_pengguna\`. Terakhir, evaluasi \`nama_pengguna\`.

Memuat editor…
Tunjukkan petunjuk

Gunakan json.loads(json_data) untuk memecahkan kode, lalu akses melalui data['nama'].

Solusi tersedia setelah 3 upaya