You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改嵌套字典结构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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 12:29:07