2.28. JSON

JSON (JavaScript Object Notation), yapılandırılmış veriler için kompakt, insan tarafından okunabilir bir metin biçimidir. Altı tür tanımlar – string, number, boolean, null, array ve object – bunların her biri doğrudan bir Python değerine eşlenir, dolayısıyla Python ile JSON arasında dönüştürme her iki yönde de tek bir işlev çağrısıdır.

JSON, yapılandırma dosyalarının ve web API’lerinin ortak dilidir. Küçük bir ayar paketini diske gözle de okuyabileceğiniz bir biçimde kaydetmeniz veya başka bir programla yapılandırılmış veri alışverişi yapmanız gerektiğinde ona başvurun.

İki işlev çoğu ihtiyacı karşılar:

  • json.dumps()dump string: bir Python değerini bir JSON dizesine dönüştürür.

  • json.loads()load string: bir JSON dizesini tekrar Python’a ayrıştırır.

json.dump / json.load çifti (s olmadan) aynı işi yapar ancak doğrudan bir dosya nesnesi alır.

2.28.1. Kodlama (dumps)

import json

config = {
    "name":  "OpenMV",
    "width": 320,
    "tags":  ["red", "round"],
}

text = json.dumps(config)
print(text)

Çıktı:

{"name": "OpenMV", "width": 320, "tags": ["red", "round"]}

Eşleme şöyledir:

Bu kümenin dışındaki herhangi bir şey (özel bir sınıf, bir bytes arabelleği, bir set) TypeError yükseltir. Önce değeri dönüştürün.

Not

CPython’ın json.dumps() işlevi, güzel biçimlendirilmiş çıktı için bir indent argümanı kabul eder; MicroPython’ınki kabul etmez. Tek biçimlendirme düğmesi, satır içi boşluğu kontrol eden separators‘tır – en kompakt biçim için (',', ':') geçirin. Çok satırlı, girintili çıktının gerekirse elle üretilmesi gerekir.

2.28.2. Kod çözme (loads)

text = '{"name": "OpenMV", "width": 320}'
config = json.loads(text)
print(config["name"], config["width"])

Çıktı:

OpenMV 320

JSON nesneleri dict, diziler list olur ve geri kalanı Python eşdeğerlerine geri eşlenir. Bozuk JSON, ValueError yükseltir.

2.28.3. Dosyaları okuma ve yazma

Dosya tabanlı çift, with ile uyumlu çalışır:

import json

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

config["width"] = 640

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

JSON dosyasını eksiksiz bir kayıt olarak ele alın – onu okuyun, Python değerini değiştirin, geri yazın. JSON’ı bir dosyanın içinde yerinde düzenlemeye çalışmak genellikle tasarrufundan daha fazla hataya yol açar.