问题描述
我有 2 个文件,一个是 test.json,另一个是我的 test.py 我的目标是更新键“test3”的值,而不是等于 3(如下所示),更新并变成 10。
这里是 test.json
{
"test": {
"test2" : 3,"test3" : 5,"test4" : [1,2,3]
},"test5" : "hello"
}
这里是 test.py
import json
with open('test.json','r') as t:
data = json.load(t)
data["test3"] = 10
with open ('test.json','w') as t:
json.dump(data,t)
运行后,我期望的输出是:
{
"test": {
"test2" : 3,"test3" : 10,"test5" : "hello"
}
注意“test3”的值变成了 10 但实际上,我的输出变成了:
{"test": {"test2": 3,"test3": 5,"test4": [1,3]},"test5": "hello","test3": 10}
缩进不是问题,而是它不是将“test3”从 5 更改为 10,而是在末尾添加了一个值为 10 的新“test3”键,并保持旧键完好无损.我也试过要求程序只打印出“test”中任何键的值,但它没有这样做,唯一有效的方法是打印出“test”本身的值或“test5”领先我相信他们的位置是什么搞砸了。对此的任何解决方案都将不胜感激,如果您感到好奇,我无法将 JSON 文件更改为更整洁的解决方案,因为我正在使用它来处理视频游戏 minecraft 中的 JSON 文件,我担心弄乱预先存在的结构会干扰游戏读取文件的方式。
解决方法
您访问嵌套字典的根目录,但其中没有“test3”...从您想要的输出中,我看到您应该首先访问存储在“test”下的内部字典,然后更改它...
import json
with open('test.json','r') as t:
data = json.load(t)
data["test"]["test3"] = 10
with open ('test.json','w') as t:
json.dump(data,t)
data
>>> {
"test": {
"test2" : 3,"test3" : 10,"test4" : [1,2,3]
},"test5" : "hello"
}