Ana içeriğe geç
Modül 8 · Ders 1 ders 4Kurstaki 29/36~10 min
Modül dersleri (1/4)

JSON: serileştirme ve ayrıştırma

JSON en yaygın veri alışverişi formatıdır. json modülü standart kütüphane bunu yerel olarak yönetir.

Python'dan JSON'a: dumps

json.dumps(object) bir Python nesnesini JSON dizesine serileştirir.

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

JSON'dan Python'a: loads

json.loads(string) bir JSON dizesini ayrıştırır ve Python nesnelerini döndürür.

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

Tür eşleme

JSONPython
objectdict
arraylist
stringstr
numberint / float
trueTrue
falseFalse
nullNone

Dosyadan: 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)

Sondaki "s" olmadan, dosyalar üzerinde (dosya benzeri) çalışırlar, "s" dizelerde bulunur.

Serileştirilemeyen türler: default

datetime, set, özel sınıflarınız varsayılan olarak serileştirilebilir değildir:

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

Bunları nasıl dönüştüreceğinizi söyleyen bir default işlevini iletebilirsiniz:

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 ve dosya işlemleri

Standart kitaplık aynı zamanda bağlam yöneticileriyle doğal olarak eşleşerek JSON verilerini doğrudan dosyalara ve dosyalara yazmak ve okumak için json.dump() ve json.load() ('s' olmadan) sağlar:

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

Deneyin

Egzersiz#python.m8.l1.e1
Denemeler: 0Yükleniyor…

`data = {'nome': 'Ada', 'anni': 36}` verildiğinde, onu indent=2 ile JSON'a serileştirin ve `json_str` değişkenine atayın. 'json_str'yi değerlendirin.

Düzenleyici yükleniyor…
İpucu göster

json.dumps(veri, girinti=2)

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#python.m8.l1.e2
Denemeler: 0Yükleniyor…

JSON dizesi s = '[{"nome": "a", "v": 1}, {"nome": "b", "v": 2}]' verildiğinde, bunu json.loads ile verilere ayrıştırın ve toplamda 'v' değerlerinin toplamını hesaplayın. Toplamı değerlendirin.

Düzenleyici yükleniyor…
İpucu göster

json.loads bir sözlük listesi döndürür.

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#python.m8.l1.e3
Denemeler: 0Yükleniyor…

JSON dizesi \`json_data = '{"name": "Alice", "age": 30}'\` verildiğinde, \`json.loads\` kullanarak bunun kodunu bir Python sözlüğüne dönüştürün. \`'ad'\` anahtarıyla ilişkili değeri çıkarın ve \`kullanıcı_adı\`nda saklayın. Son olarak \`kullanıcı_adı\` değerini değerlendirin.

Düzenleyici yükleniyor…
İpucu göster

Kodu çözmek için json.loads(json_data) kullanın, ardından data['name'] yoluyla erişin.

3 denemeden sonra çözüm mevcut