你应该如何使用python更新本身就是值的键的JSON值

问题描述

我有 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"
}