在Python中将内容添加到JSON格式的字典文件

7

我有一个名为 python_dictionary.json 的文件,其中包含一个字典。我希望能够在不需要每次打开文件的情况下添加内容。假设 python_dictionary.json 中仅包含如下内容:

{
    key1: value`
}

我希望你能够添加

new_dictionary=
    {
        key2:value2
    }

我现在正在做的是:

with open('python_dictionary.json','a') as file:
    file.write(json.dumps(new_dictionary,indent=4))

这将创建一个字典,格式如下:
{
    key1:value1
}
{
    key2:value2
}

这显然不是一个真正的字典。

我知道这个:在不重写 JSON 文件的情况下添加现有 JSON 文件中的新值

但这只涉及添加单个条目,我想做一个json.dumps。


“但这只涉及添加单个条目,我想要做一个json.dumps。” - 我不确定你的意思,你链接的方法完全兼容于json.dumps,而且你可以多次调用它。你需要它不能完成什么? - SuperBiasedMan
1
只是让你知道那也不是JSON。 - kylieCatt
2个回答

10
听起来你想从json中加载一个字典,添加新的键值对并将其写回。如果是这样的话,你可以这样做:
with open('python_dictionary.json','r+') as f:
    dic = json.load(f)
    dic.update(new_dictionary)
    json.dump(dic, f)

(mode是'r +',用于读写而不是追加,因为您正在重新编写整个文件)

如果您想进行附加操作,并使用json.dumps,我猜您必须在追加之前从json.dumps字符串中删除第一个{。类似这样:

with open('python_dictionary.json','a') as f:
    str = json.dumps(new_dictionary).replace('{', ',', 1)
    f.seek(-2,2)
    f.write(str)

1
在你的第一个例子中,应该是json.dump(dic, f)吧?(因为dumps只返回一个字符串,不会对文件对象进行操作) - myersjustinc

1
当'r+'或'a'选项无法正常工作时,您可以执行以下操作:
with open('python_dictionary.json','r') as f:
    dic = json.load(f)

dic.update(new_dictionary)

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

第一部分读取现有的字典。然后,您使用新字典更新字典。最后,您重写整个更新后的字典。


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