Class içerisinde json kullanımı

Merhabalar bir json dosyası içerisine kullanıcıdan aldığım değerleri kaydetmek istiyorum yalnız yeni kayıt sırasında ikinci bir anahtar kelime oluşuyor bu sorunu nasıl çözebilirim?

Kod bloğu:

    def kayitOl(self):
    gelen_Kadi = input("Kullanıcı adınızı giriniz: ")
    gelen_Sifre = input("Şifrenizi giriniz: ")
    gelen_Mail = input("E-mail adresinizi giriniz: ")

    veriler = {"Kullanicilar": []}

    veriler["Kullanicilar"].append({"kadi": gelen_Kadi, "sifre": gelen_Sifre, "mail": gelen_Mail})

    with open("veriler.json", "a") as dosya:
        json.dump(veriler, dosya)

Çıktı:

{"Kullanicilar": [{"kadi": "asdas", "sifre": "asd", "mail": "asd"}]}{"Kullanicilar": [{"kadi": "ad", "sifre": "asd", "mail": "asd"}]}

Gördüğünüz üzere Kullanicilar anahtar kelimesi tekrarlanıyor.

Çünkü dosyayı (a)ppend yani ekleme modunda açmışsınız. Eski verilerin siinmesini istiyorsanız (w) modunda açın.

(w) ile açınca da eski verinin üzerine yazıyor ve ne yapmam gerektiğini anlayamadım.

eski verinin üzerine yazılmasını istemiyorum.

istediğim format:

{"Kullanicilar": [{"kadi": "abc", "sifre": "123", "mail": "abc@"}, {"kadi": "asd", "sifre": "asd", "mail": "asd"}]}

O zaman

veriler = {"Kullanicilar": []}

şu tanımlama yanlış. Çünkü her seferinde sıfırlamış olacaksınız. Onun yerine, var olan verileri dosyadan okuyup ekleme yaparak yeniden dosyaya yazabilirsiniz. Şöyle yani

def dosyadan_yukle(dosya_adi):
    with open(dosya_adi, "r") as _:
        return json.load(_)

def dosyaya_yaz(veri, dosya_adi):
    with open(dosya_adi, "w") as _:
        json.dump(veri, _)

veriler = dosyadan_yukle("veriler.json")
# burada kullanıcıdan aldığın bilgiler olacak (kullanici adi vs)
veriler["kullanici"].append({"kadi": gelen_Kadi, "sifre": gelen_Sifre, "mail": gelen_Mail})
dosyaya_yaz(veriler, "veriler.json")
1 Beğeni

ben mi beceremedim bilmiyorum ama aldığım çıktı şu şekilde

Traceback (most recent call last):
  File "C:/Users/ozgur/PycharmProjects/pythonProject/Üyelik Sistemi.py", line 81, in <module>
    sistem.calistir()
  File "C:/Users/ozgur/PycharmProjects/pythonProject/Üyelik Sistemi.py", line 72, in calistir
    self.kayitOl()
  File "C:/Users/ozgur/PycharmProjects/pythonProject/Üyelik Sistemi.py", line 52, in kayitOl
    veriler = dosyadan_yukle("veriler.json")
  File "C:/Users/ozgur/PycharmProjects/pythonProject/Üyelik Sistemi.py", line 46, in dosyadan_yukle
    return json.load(dosya)
  File "C:\Users\ozgur\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 296, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\Users\ozgur\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\Users\ozgur\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\ozgur\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Hocam json dosyanızı uygun koşullar altında tekrar oluşturun. Örneğin içeriğini silip şunu ekleyebilirsiniz.

{"kullanici": []}
1 Beğeni

Çok teşekkür ederim, json içerisindeki değişiklikler sonrası hatasız çalıştı.