2014-07-04 16 views
5

Ich benutze Python und ich habe eine JSON-Datei, in der ich einen Wert für einen bestimmten Schlüssel aktualisieren möchte. Das heißt, ich habe die my_file.json folgende Daten enthaltenWie aktualisiert man eine JSON-Datei mit Python?

{"a": "1", "b": "2", "c": "3"} 

und ich möchte nur den Wert auf die b Schlüssel 2-9 so im Zusammenhang ändern, dass die aktualisierte Datei aussehen, als wie:

{"a": "1", "b": "9", "c": "3"} 

Wie kann ich das machen?


ich folgendes versucht, aber ohne Erfolg (die Änderungen werden nicht in der Datei gespeichert):

with open('my_file.json', 'r+') as f: 
    json_data = json.load(f) 
    json_data['b'] = "9" 
    f.close() 
+0

Dies kann helfen: http://stackoverflow.com/questions/21035762/python-read -json-file-and-modify – Vipul

Antwort

7

Sie nicht die geänderten Daten überhaupt gespeichert haben. Sie müssen erst laden, dann ändern und erst dann speichern. Es ist nicht möglich, JSON-Dateien direkt zu ändern.

with open('my_file.json', 'r') as f: 
    json_data = json.load(f) 
    json_data['b'] = "9" 

with open('my_file.json', 'w') as f 
    f.write(json.dumps(json_data)) 

Sie können auch dies tun:

with open('my_file.json', 'r+') as f: 
    json_data = json.load(f) 
    json_data['b'] = "9" 
    f.seek(0) 
    f.write(json.dumps(json_data)) 
    f.truncate() 

Wenn Sie es sicher machen wollen, müssen Sie zuerst die neuen Daten in eine temporäre Datei in denselben Ordner schreiben, und benennen Sie dann die temporäre Datei auf die ursprüngliche Datei. So verlieren Sie keine Daten, auch wenn dazwischen etwas passiert.

Wenn Sie darüber nachdenken, JSON-Daten sind sehr schwer vor Ort zu ändern, da die Datenlänge nicht festgelegt ist, und die Änderungen können sehr signifikant sein.

+0

Können Sie ein konkretes Beispiel geben? – user502052

+0

+1 für die Erinnerung an truncate – timgeb

2

Sie sind fast da, Sie müssen nur die aktualisierte json_data zurück in die Datei schreiben. Befreien Sie sich von f.close(), da die with-Anweisung dafür sorgt, dass die Datei geschlossen wird. Dann Ausgabe

with open('my_file.json', 'w') as f: 
    f.write(json.dumps(json_data)) 
+1

Was passiert, wenn die neuen Daten kürzer ist als die alten Daten in der Datei ... – DrV

+0

@DrV - Es ist mein Fall ... – user502052

+0

@DrV Punkt genommen, ein anderes 'mit' Block ist wahrscheinlich sauberer als 'seek (0)' – timgeb

0

Dies ist der einfachste Weg, um die JSON-Datei Update/Schreiben zu tun. wo Sie Instanz von JSON-Datei als ‚f‘ schaffen und das Schreiben der ‚Daten‘ in die JSON-Datei,

#write json file 

with open('data.json', 'w') as f: 
    json.dump(data, f) 

#Read json file 

with open('data.json', 'r') as f: 
    json.load(data, f) 
Verwandte Themen