如何使用Python更新JSON文件?

9

我正在使用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()

这可能会有所帮助: https://dev59.com/Y2Ei5IYBdhLWcg3wsODc - Vipul
4个回答

15

您根本没有保存更改的数据。您必须先加载,然后修改,最后才能保存。不可能原地修改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 数据非常难以原地修改,因为数据长度不是固定的,而且更改可能非常显著。


你能提供一个具体的例子吗? - user502052
1
第一段代码类别第5行缺少冒号: with open('my_file.json', 'w') as f: - Zion Oyemade

2
你已经接近成功了,你只需要将更新后的json_data写回文件中即可。删除f.close(),因为with语句会确保文件被关闭。然后,执行:
with open('my_file.json', 'w') as f:
    f.write(json.dumps(json_data))

@DrV 理解了,另一个 with 块可能比 seek(0) 更清晰。 - timgeb
@timgeb:seek也是一个不错的解决方案,可以看看我的回答。 - DrV

1
这是更新/写入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)

0
  • 使用 json.load 函数打开文件并将所有内容存储在一个变量中

  • 更新先前变量中存储的密钥

  • 再次打开文件并使用已更新的变量更新内容

def updateJsonFile():
    jsonFile = open("my_file.json", "r") # Open the JSON file for reading
    data = json.load(jsonFile) # Read the JSON into the buffer
    jsonFile.close() # Close the JSON file

    ## Working with buffered content
    data["b"] = "9"

    ## Save our changes to JSON file
    jsonFile = open("my_file.json", "w+")
    jsonFile.write(json.dump(data))
    jsonFile.close()

在Stack Overflow上,不鼓励仅包含代码的帖子。通过添加支持信息和解释,您的答案可以得到更大的改善。有关更多信息,请参见“如何撰写良好的答案”。 - Sylvester Kruin

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