更新json文件

时间:2013-03-14 17:06:14

标签: python json

我有一些带有一些数据的json文件,并且偶尔会更新这个文件。

我读了这个文件:

with open('index.json', 'rb') as f:
    idx = json.load(f)

然后检查是否存在来自潜在新数据的密钥,如果密钥不存在则更新文件:

with open('index.json', mode='a+') as f:
    json.dump(new_data, f, indent=4)

但是这个过程只是创建了新的json对象(python dict)并将其作为新对象追加到输出json文件中,使文件无效json文件。

有没有简单的方法可以通过更新初始字典来将新数据附加到json文件而不会覆盖整个文件?

1 个答案:

答案 0 :(得分:11)

执行操作的一种方法是在文件中每行写一个JSON对象。我正在使用这种方法,它运作良好。

一个很好的好处是,您可以更有效地读取文件(内存方式),因为您可以一次读取一行。如果你需要所有这些,在Python中组装列表没有问题,但如果你不这样做,你运行得更快,你也可以追加。

因此,要最初编写所有对象,您可以执行以下操作:

with open(json_file_path, "w") as json_file:
    for data in data_iterable:
        json_file.write("{}\n".format(json.dumps(data)))

然后有效阅读(无论文件大小,都会消耗很少的内存):

with open(json_file_path, "r") as json_file:
    for line in json_file:
        data = json.loads(line)
        process_data(data)

更新/追加:

with open(json_file_path, "a") as json_file:
    json_file.write("{}\n".format(json.dumps(new_data)))

希望这会有所帮助:)