Pythonを使用していて、特定のキーに関連する値を更新したいJSONファイルがあります。つまり、次のデータを含むmy_file.json
があります。
{"a": "1", "b": "2", "c": "3"}
b
キーに関連する値を2
から9
に変更して、更新されたファイルが次のようになるようにします。
{"a": "1", "b": "9", "c": "3"}
どうすればそれを作ることができますか?
私は以下を試しましたが、成功しませんでした(変更はファイルに保存されません):
with open('my_file.json', 'r+') as f:
json_data = json.load(f)
json_data['b'] = "9"
f.close()
変更したデータはまったく保存していません。最初にロードしてから変更してから保存する必要があります。 JSONファイルをインプレースで変更することはできません。
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))
これを行うこともできます:
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()
安全を確保したい場合は、最初に新しいデータを同じフォルダー内の一時ファイルに書き込み、次に一時ファイルの名前を元のファイルに変更します。そうすれば、間に何かが起こってもデータが失われることはありません。
そういえば、JSONデータはデータの長さが固定されていないため、その場で変更するのは非常に難しく、変更は非常に重要になる可能性があります。
ほぼそこにいます。更新された_json_data
_をファイルに書き戻すだけです。 with
ステートメントはファイルが確実に閉じられるため、f.close()
を削除します。次に、発行します
_with open('my_file.json', 'w') as f:
f.write(json.dumps(json_data))
_
これは、jsonファイルの更新/書き込みを行う最も簡単な方法です。ここで、jsonファイルのインスタンスを「f」として作成し、「data」をjsonファイルに書き込みます。
#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)