修改嵌套字典结构JSON文件时丢失其他字典的问题解决
解决修改JSON文件后丢失父字典结构的问题
问题的核心很明显:你在写入文件的时候,错误地只把修改后的**子字典temperature_settings**写了进去,而不是保存整个完整的JSON数据对象。
先看你代码里的关键问题点:
with open(json_file, "w") as input_json: json_data = json.dump(temperature_settings, input_json) # 这里只写入了子字典,自然丢失了其他内容!
因为字典是可变对象,你之前执行temperature_settings["temperature_start"] = 99.9的时候,其实已经同步修改了原json_data里的对应嵌套内容。所以根本不需要单独保存子字典,直接把整个json_data写入文件就能保留完整结构。
修正后的完整代码
import json def modify_json_file(json_file): with open(json_file, "r") as input_json: json_data = json.load(input_json) print("type of data: ", type(json_data)) for k,v in json_data.items(): print(k,v) print('\n'*2) # 直接操作原json_data中的嵌套字典(字典是引用类型,修改会同步到原对象) temperature_settings = json_data["temperature_settings"] print("type of temperature_settings: ", type(temperature_settings)) print(temperature_settings["temperature_start"]) temperature_settings["temperature_start"] = 99.9 # 这一步已经修改了json_data的内部内容 # 写入整个完整的json_data对象,而不是子字典 with open(json_file, "w") as output_json: json.dump(json_data, output_json, indent=4) # indent参数可以让JSON格式化换行,提升可读性 print('\n'*25) modify_json_file("file6.json")
关键说明
- 字典是引用类型,
json_data["temperature_settings"]指向的是原字典里的嵌套对象,修改这个子对象的内容会直接同步到json_data中,不需要额外赋值回原对象。 - 最后写入时用
json.dump(json_data, output_json),就能把包含test_settings和修改后temperature_settings的完整嵌套结构保存到文件。 - 可选的
indent=4参数可以让输出的JSON和你期望的结果格式一致,更易读。
运行修正后的代码后,你的JSON文件会得到期望的完整结构:
{ "test_settings": { "rigID": "r1", "test": "blank" }, "temperature_settings": { "temperature_start": 99.9, "temperature_stop": "blank", "temperature_step": "blank" } }
内容的提问来源于stack exchange,提问作者Windy71
相关产品推荐
相关产品推荐

