web-dev-qa-db-ja.com

Pythonを使用してJSONファイルを更新するにはどうすればよいですか?

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()
7
user502052

変更したデータはまったく保存していません。最初にロードしてから変更してから保存する必要があります。 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データはデータの長さが固定されていないため、その場で変更するのは非常に難しく、変更は非常に重要になる可能性があります。

11
DrV

ほぼそこにいます。更新された_json_data_をファイルに書き戻すだけです。 withステートメントはファイルが確実に閉じられるため、f.close()を削除します。次に、発行します

_with open('my_file.json', 'w') as f:
    f.write(json.dumps(json_data))
_
2
timgeb

これは、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)
1
Suhas Jadhav