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.
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 sortedDari JSON ke Python: loads
json.loads(string) mem-parsing string JSON dan mengembalikan objek Python.
testo = '{"nome": "Ada", "anni": 36}'
d = json.loads(testo)
d["nome"] # 'Ada'
type(d) # <class 'dict'>Ketik pemetaan
| JSON | ular piton |
|---|---|
object | dict |
array | list |
string | str |
number | int / float |
true | True |
false | False |
null | None |
Dari berkas: dump / load
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:
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializableAnda dapat meneruskan fungsi default yang memberitahukan cara mengubahnya:
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:
with open("data.json", "w") as f:
json.dump(data, f)Cobalah
Diberikan `data = {'nome': 'Ada', 'anni': 36}`, buat serial ke JSON dengan indent=2 dan tetapkan ke variabel `json_str`. Evaluasi `json_str`.
Tunjukkan petunjuk
json.dumps(data, indent=2)
Solusi tersedia setelah 3 upaya
Tinjau latihan
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.
Tunjukkan petunjuk
json.loads mengembalikan daftar dicts.
Solusi tersedia setelah 3 upaya
Tantangan tambahan
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\`.
Tunjukkan petunjuk
Gunakan json.loads(json_data) untuk memecahkan kode, lalu akses melalui data['nama'].
Solusi tersedia setelah 3 upaya