如何在Python中向JSON文件追加内容?

45

我有一个JSON文件,其中包含{"67790": {"1": {"kwh": 319.4}}}。现在我创建了一个需要添加到JSON文件中的字典a_dict

我尝试了以下代码:

with open(DATA_FILENAME, 'a') as f:
   json_obj = json.dump(a_dict, json.load(f)
   f.write(json_obj)
   f.close()

这段代码有什么问题?我该如何解决?


2
当您使用with open(...) as f:时,无需执行f.close() - Tony Tuttle
这里的append是什么意思?例如,a_dict之前是什么,结果应该是什么 - Karl Knechtel
3个回答

95
假设您有一个名为test.json的文件,其内容如下:
{"67790": {"1": {"kwh": 319.4}}}

然后,下面的代码将会load这个json文件,并使用dict.update()更新其中的数据,并dumptest.json文件中:

import json

a_dict = {'new_key': 'new_value'}

with open('test.json') as f:
    data = json.load(f)

data.update(a_dict)

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

那么,在 test.json 中,你会有:

{"new_key": "new_value", "67790": {"1": {"kwh": 319.4}}}

希望这就是你想要的。


7
如果我们想要这样做呢?{"67790": {"1": {"kwh": 319.4,"new_key": "new_value", }}} - amitnair92
6
问题在于使用“w”选项会在每次想要更改或添加到 JSON 文件时重新写入文件。 - Moshe Rabaev
2
如何将元素添加到已存在的JSON数组中? - backslashN
要进行追加,请使用 data["key"].append({"new_key":"new_value"}) - Kerkness
data.update(a_dict)怎么不超出作用域或边界了呢?@alexce - AST
@AST Python字典没有固定的长度。update函数将更新现有条目或在尚不存在的情况下创建它们。但是,有人知道如何将内容追加到JSON文件中而不必重写整个文件并可能破坏其缩进吗? - Meredith Hesketh Fortescue

4
你需要使用a_dict更新json.load的输出,然后转储结果。 你不能追加到文件中,但是你需要覆盖它。

-4
json_obj=json.dumps(a_dict, ensure_ascii=False)

4
这样做不会覆盖对象吗? - Milan Velebit
它将使用此 a_dict 对象覆盖json文件,除非您使用要存储的所有值更新 a_dict - Jagoda Gorus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,