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ı.