JSON Speicherung

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Hallo,
ich habe eine JSON-Datei mit

Code: Alles auswählen

        with open(str(Path(__file__).parent) + "\config.json", 'r') as config_file:
            self.config_data = json.load(config_file)
geladen und zum Beispiel

Code: Alles auswählen

config_file['Color_Mode'] = "blue"
geändert.
Nun möchte ich die alte JSON-Werte auch in der Datei abspeichern, dass beim erneuten Aufrufen des Programms die Werte noch vorhanden sind.
Wie geht das?
Vielen Dank für Eure Hilfe!
Benutzeravatar
__blackjack__
User
Beiträge: 13099
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JakobPrie: Also erst einmal kann man falscher mit `Path` umgehen. Man macht da keine Zeichenkette draus um dann per ``+`` einen Pfadteil als Zeichenkette anzuhängen, und das dann auch noch mit einem plattformabhängigen Pfadtrenner. Und `Path`-Objekte haben eine `open()`-Methode.

Code: Alles auswählen

        with (Path(__file__).parent / "config.json").open("rb") as config_file:
            self.config_data = json.load(config_file)
JSON-Dateien würde ich im Binärmodus öffnen, dann kümmert sich das `json`-Modul um die passende UTF-Kodierung. Ansonsten sollte man dringend selbst mindestens mal UTF-8 als Kodierung explizit angeben.

Die Beispielzeile wird nicht funktionieren weil `config_file` ein Dateiobjekt ist.

Ansonsten verstehe ich die Frage nicht? Was genau funktioniert denn nicht? Oder warum glaubst Du das würde nicht funktionieren wenn Du's schon nicht ausprobierst?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Hallo,
Dank für die Hilfe!
Tatsächlich rufe ich in meinem Code config_data auf.
Das mit dem Path werde ich gleich so anwenden!

Wenn ich jetzt mit config_data["..."] = ... was änder, wird das irgendwie nicht in der Datei selber gespeichert. Wenn ich das Programm erneut starte, habe ich noch die alten Startwerte

Ausprobiert habe ich es, es klappt aber dennoch nicht
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@JakobPrie: auf magische Weise wird das auch nicht passieren. Du mußt schon die Datei zum Schreiben öffnen und dann per json.dump `config_data` hineinschreiben.
Antworten