İçeriğe geç

Menü

Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python JSON Dosyası Nasıl Güncellenir? load, Değiştir ve dump Akışı

python-json-dosyasi-guncelleme
Bu yazıda neler var?
  1. Python JSON dosyası güncelleme akışı nasıl çalışır?
  2. json.load, json.dump, r ve w kipleri ne işe yarar?
  3. İç içe JSON ayar dosyası nasıl güncellenir?
  4. Eksik anahtarlar ve bozuk JSON nasıl ele alınır?
  5. JSON güncelleme öncesi ve sonrası hangi kontrol listesi uygulanır?

Python JSON dosyası güncelleme, dosyayı metin olarak parça parça düzenlemek yerine JSON verisini Python nesnesine alıp kontrollü biçimde yeniden yazma işlemidir. Dosyayı with open ile "r" kipinde ve encoding="utf-8" kullanarak açar, json.load ile Python nesnesine dönüştürür, beklenen kökü ve alanları kontrol eder, ardından hedef değeri değiştirirsin. Son aşamada dosyayı "w" kipinde açıp json.dump ile güncellenmiş nesnenin tamamını yeniden kaydeder ve dosyayı tekrar okuyarak sonucu doğrularsın.

Özetle, json.load dosyayı Python nesnesine çevirir, json.dump ise güncellenmiş nesneyi yeniden JSON olarak kaydeder. Bu akış, doğrulanmış Python nesnesini yeniden yazmaya dayanır. "w" kipi mevcut içeriğin üzerine yazdığı için yazma aşaması, okuma ve doğrulama tamamlandıktan sonra başlatılmalıdır.

Python JSON dosyası güncelleme akışı nasıl çalışır?

İlk adımda JSON dosyasının en dışındaki yapının beklenen türde olup olmadığını kontrol et. Örneğin sözlük beklenen bir dosyada listeyle karşılaşırsan ya da hedef anahtar bulunmuyorsa değişiklik yapmadan işlemi durdurabilirsin. Hedef değer, Python nesnesi üzerinde değiştirildikten sonra json.dump ile dosyanın tamamı yeniden yazılır. Bu, yalnızca tek bir satırı değiştirmek değil, güncellenmiş veri yapısını yeniden JSON biçimine dönüştürmektir.

Kaydetme sonrasında dosyayı yeniden "r" kipinde okumak, yazılan içeriğin tekrar çözümlenebildiğini ve değişikliğin dosyaya yansıdığını kontrol etmeyi sağlar. Python temellerini pekiştirmek için ücretsiz Sıfırdan Temel Python video eğitimi içeriğinden yararlanabilirsin.

json.load, json.dump, r ve w kipleri ne işe yarar?

json.load, json.dump, r ve w kipleri ne işe yarar?

with open, dosyayı belirli bir kip ve kodlamayla açar; işlem bloğu tamamlandığında dosyanın kapatılmasını düzenler. json.load açık dosya nesnesindeki JSON içeriğini sözlük veya liste gibi bir Python nesnesine alır. Bu nesne üzerinde değişiklik yaptıktan sonra json.dump, nesneyi açık dosyaya JSON biçiminde yazar.

"r" kipi okuma içindir. "w" kipi ise dosyanın mevcut içeriğini temizleyip yeniden yazmaya hazırlar. Bu nedenle dosyayı "w" ile açmadan önce okuma, JSON çözümleme ve alan doğrulama adımları tamamlanmalıdır. Hem okuma hem yazma sırasında encoding="utf-8" belirtmek, Türkçe karakter içeren verilerin tutarlı işlenmesine yardımcı olur. indent=2 çıktıyı girintili ve okunabilir hâle getirir; ensure_ascii=False ise Türkçe karakterlerin kaçış dizileri yerine daha okunabilir görünmesine yardımcı olur.

Bileşen Görevi Akıştaki yeri Dikkat
with open ile "r" JSON dosyasını okumak için açar. Güncellemenin başlangıcı encoding="utf-8" açıkça belirtilmelidir.
json.load Dosyadaki JSON'u Python nesnesine dönüştürür. Okuma ve doğrulama Kök yapı ve hedef alan kontrol edilmelidir.
with open ile "w" Dosyayı yeniden yazmak için açar. Doğrulamadan sonra Açıldığı anda mevcut içerik temizlenir.
json.dump Python nesnesini JSON olarak dosyaya yazar. Kaydetme Güncellenmiş nesnenin tamamı yazılır.
indent=2 JSON çıktısını girintili biçimde düzenler. Yazma biçimlendirmesi Verinin içeriğini değil, görünümünü değiştirir.
ensure_ascii=False Unicode karakterlerin okunabilir yazılmasına yardımcı olur. JSON'u kaydederken UTF-8 kodlamasıyla birlikte kullanılmalıdır.

İç içe JSON ayar dosyası nasıl güncellenir?

İç içe JSON ayar dosyası nasıl güncellenir?

İç içe bir JSON dosyasını güncellemek için önce dosyayı load ile Python veri yapısına aktarmalı, sözlük ve liste türlerini kontrol etmeli, değişikliği bellekte yapmalı ve sonucu dump ile yeniden kaydetmelisin. Ardından dosyayı tekrar okuyarak yazma işleminin doğru gerçekleştiğini kontrol edebilirsin.

Başlangıçta ayarlar.json dosyasının içeriği şöyle olsun:

{
  "profil": {
    "tema": "acik",
    "dil": "tr"
  },
  "gorevler": [
    {
      "id": 1,
      "baslik": "Değişkenleri öğren",
      "tamamlandi": false
    },
    {
      "id": 2,
      "baslik": "Listelerle çalış",
      "tamamlandi": false
    }
  ]
}

Aşağıdaki kod, iç içe sözlük ve listeyi doğrular, id değeri 1 olan görevi bulur, profil temasını değiştirir ve dosyayı yeniden yazar:

import json

with open('ayarlar.json', 'r', encoding='utf-8') as dosya:
    ayarlar = json.load(dosya)

if not isinstance(ayarlar, dict):
    raise TypeError('Kök nesne sözlük olmalı.')

profil = ayarlar.get('profil')
gorevler = ayarlar.get('gorevler')

if not isinstance(profil, dict):
    raise TypeError('profil alanı sözlük olmalı.')

if not isinstance(gorevler, list):
    raise TypeError('gorevler alanı liste olmalı.')

if (not isinstance(profil.get('tema'), str)
        or not isinstance(profil.get('dil'), str)):
    raise TypeError('profil.tema ve profil.dil metin olmalı.')

hedef = None

for gorev in gorevler:
    if not isinstance(gorev, dict):
        raise TypeError('Her görev sözlük olmalı.')

    if (type(gorev.get('id')) is not int
            or not isinstance(gorev.get('baslik'), str)
            or type(gorev.get('tamamlandi')) is not bool):
        raise TypeError('Görev alanlarının türleri geçersiz.')

    if gorev['id'] == 1:
        hedef = gorev

if hedef is None:
    raise KeyError('id değeri 1 olan görev bulunamadı.')

profil['tema'] = 'koyu'
hedef['tamamlandi'] = True

with open('ayarlar.json', 'w', encoding='utf-8') as dosya:
    json.dump(ayarlar, dosya, indent=2, ensure_ascii=False)

with open('ayarlar.json', 'r', encoding='utf-8') as dosya:
    sonuc = json.load(dosya)

print(json.dumps(sonuc, indent=2, ensure_ascii=False))

Yazma ve yeniden okuma sonrasında konsolda ya da dosyada beklenen sonuç şöyledir:

{
  "profil": {
    "tema": "koyu",
    "dil": "tr"
  },
  "gorevler": [
    {
      "id": 1,
      "baslik": "Değişkenleri öğren",
      "tamamlandi": true
    },
    {
      "id": 2,
      "baslik": "Listelerle çalış",
      "tamamlandi": false
    }
  ]
}

Bu sonuçta yalnızca profil.tema ve id değeri 1 olan görevin tamamlandi alanı değişmiştir. dil alanı ile ikinci görev korunur. JSON içinde mantıksal değerler küçük harfle true ve false yazılır. Python kodunda ise bunların karşılığı büyük harfle True ve False değerleridir.

Eksik anahtarlar ve bozuk JSON nasıl ele alınır?

Eksik anahtar ile bozuk JSON farklı sorunlardır. profil, tema veya gorevler alanı yoksa dosya sözdizimi bakımından geçerli olabilir, fakat beklenen yapıyı taşımıyor demektir. Bu durumda in ile anahtarın bulunup bulunmadığını, dict.get() ile değerini ve isinstance() ile türünü kontrol etmelisin.

Örneğin kök nesnenin sözlük olup olmadığı, 'profil' in ayarlar ve 'gorevler' in ayarlar kontrolleriyle alanların bulunup bulunmadığı incelenebilir. profil.get('tema') metin değilse veya gorevler liste değilse anlaşılır bir TypeError ya da KeyError üretmek, eksik veriyi sessizce varsaymaktan daha güvenlidir.

JSON sözdizimi bozuksa hata json.load() sırasında oluşur. Bu durumda yalnızca ilgili hatayı yakalayabilirsin:

with open('ayarlar.json', 'r', encoding='utf-8') as dosya:
    try:
        ayarlar = json.load(dosya)
    except json.JSONDecodeError as hata:
        raise ValueError(
            f'JSON sözdizimi bozuk: {hata.msg} '
            f'(satır {hata.lineno}, sütun {hata.colno})'
        ) from hata

Satır ve sütun bilgisi, hatanın yakınındaki virgül, tırnak, süslü parantez veya köşeli parantez uyumsuzluğunu bulmayı kolaylaştırır. Her hatayı yakalayan except Exception yerine beklenen hata türünü yakalamak, sorunun kaynağını görünür tutar.

Yapı ve değer kontrolleri tamamlanmadan w kipine geçme. Yazma işlemi mevcut içeriğin üzerine yazabileceği için hatalı veriyi kaydetme veya özgün içeriği kaybetme riski oluşur. Yazma sonrasında dosyayı yeniden r ile açıp json.load() çağırmak, dosyanın tekrar ayrıştırılabildiğini gösterir; ancak görev kimliklerinin benzersizliği gibi bütün iş kurallarını tek başına doğrulamaz.

JSON güncelleme öncesi ve sonrası hangi kontrol listesi uygulanır?

  1. Oku: Dosyayı r kipinde ve UTF-8 kodlamasıyla aç. Ardından json.load kullanarak JSON içeriğini Python sözlüğü veya listesine aktar.
  2. Doğrula: Verinin kök yapısını, iç içe alanların konumunu, kullanılacak anahtarları ve değer türlerini kontrol et. Örneğin bir alanın sözlük, liste, metin ya da sayı olması güncelleme biçimini etkiler.
  3. Değiştir: Yalnızca hedef alanları güncelle. Diğer anahtarları ve iç içe yapıların düzenini gereksiz yere değiştirmemek, dosyanın beklenen yapısını korumaya yardımcı olur.
  4. Yaz: Veriyi doğruladıktan sonra dosyayı w kipinde aç ve json.dump ile kaydet. Okunabilir bir çıktı için indent kullanabilir, Türkçe karakterlerin korunması gerekiyorsa ensure_ascii=False ekleyebilirsin.
  5. Tekrar oku: Yazma işlemi tamamlandıktan sonra dosyayı yeniden json.load ile oku. Güncellenen alanların beklenen değerleri taşıdığını ve diğer yapıların korun duğunu incele.

Python dosya işlemlerini daha geniş ve kişiye özel bir öğrenme planıyla sürdürmek istersen birebir Python dersleri kapsamında bu akışı farklı veri yapılarıyla çalışabilirsin.

Bu sıra, JSON güncellemesini kontrollü ve izlenebilir adımlara ayırır.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara