python中的json.dump()是否重写或附加json文件

python中的json.dump()是否重写或附加json文件,python,json,Python,Json,使用json.dump()时,我注意到它似乎在重写整个文档。这是正确的吗?还有没有其他方法可以像.append()deos和列表一样附加到字典中 当我像这样编写函数并更改键值(name)时,似乎该项被追加了 filename = "infohere.json" name = "Bob" numbers = 20 #Write to JSON def writejson(name = name, numbers = numbers): with o

使用
json.dump()
时,我注意到它似乎在重写整个文档。这是正确的吗?还有没有其他方法可以像
.append()
deos和列表一样附加到字典中

当我像这样编写函数并更改键值(name)时,似乎该项被追加了

filename = "infohere.json"
name = "Bob"
numbers = 20

#Write to JSON
def writejson(name = name, numbers = numbers):
    with open(filename, "r") as info:
        xdict = json.load(info)
    
    xdict[name] = numbers

    with open(filename, "w") as info:
        json.dump(xdict, info)

但是,当您这样写出来时,您可以看到代码清楚地覆盖了整个dictionary/json文件

filename = infohere.json
dict = {"Bob":23, "Mark":50}
dict2 = {Ricky":40}

#Write to JSON
def writejson2(dict):
    with open(filehere, "w") as info:
        json.dump(dict, info)

writejson(dict)
writejson(dict2)
在第二个示例中,它只显示最后一个日期输入,这让我相信这是在重写整个文档。如果它在每次
json.dump
期间写入整个文档,这是否会导致更大的json文件出现问题,如果是的话,还有另一种方法,如.append(),但用于处理json

提前谢谢。

都不必了。
json.dump
在写入文件时不决定是否删除先前的内容。当您运行
open(filehere,“w”)
时,就会发生此决定;这就是删除旧内容的原因

但是:普通的JSON不适合附加。 单个JSON文档是一个对象。这种格式有多种变体,允许在一个文件中包含多个文档,其中最常见的是JSONL(每行有一个JSON文档)。除非您使用这种格式,否则尝试将JSON附加到非空文件通常不会导致可以成功解析的内容。

json.dump
在写入文件时不决定是否删除先前的内容。当您运行
open(filehere,“w”)
时,就会发生此决定;这就是删除旧内容的原因

但是:普通的JSON不适合附加。
单个JSON文档是一个对象。这种格式有多种变体,允许在一个文件中包含多个文档,其中最常见的是JSONL(每行有一个JSON文档)。除非您使用这种格式,否则尝试将JSON附加到非空文件通常不会导致可以成功解析的内容。

。。。在重新编写字典之前,只需将数据添加到字典中?这里的实际困难是什么?当我通过用户输入更改名称和数字变量时,我希望它添加到json文件中的当前字典中,而不是重写整个文档。您不能“添加到json文件”。JSON是单个数据结构的表示。如果要修改其中的一部分,可以加载文件,更改数据,然后将整个内容写回文件。这就是我想知道的。这是否会导致大量数据出现问题?在某些情况下,这会变得效率低下,是的。如果您想要像数据库一样工作的东西,请使用数据库。。。。在重新编写字典之前,只需将数据添加到字典中?这里的实际困难是什么?当我通过用户输入更改名称和数字变量时,我希望它添加到json文件中的当前字典中,而不是重写整个文档。您不能“添加到json文件”。JSON是单个数据结构的表示。如果要修改其中的一部分,可以加载文件,更改数据,然后将整个内容写回文件。这就是我想知道的。这是否会导致大量数据出现问题?在某些情况下,这会变得效率低下,是的。如果你想要一个像数据库一样工作的东西,那就使用数据库吧。这是有道理的。很抱歉问题中的术语错误。在编写JSON对象时,它是一个单元,我可以将其作为dict或字符串导入python,修改并“转储”到JSON文件中。当截断结束时(将
open(filehere,“w”)
更改为
open(filehere,“a”)
),它创建了一个新的对象(行),但它必须是一个JSON行文件才能使用它和使用JSON行库。这很有意义,现在为问题中的术语错误感到抱歉。在编写JSON对象时,它是一个单元,我可以将其作为dict或字符串导入python,修改并“转储”到JSON文件中。当截断结束时(将
open(filehere,“w”)
更改为
open(filehere,“a”)
),它创建了一个新对象(行),但它必须是一个JSON行文件才能使用它和使用JSON行库。