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

如何用Python基于update.json更新config.json文件?

如何用Python根据update.json更新config.json中的嵌套键值对?

没问题,这个需求完全可以用Python实现!既然你提到update.json里的所有键都是唯一的,那我们只需要写一个递归遍历的函数,去config.json的嵌套结构里找到对应键,然后替换它的值就好。

先看一下你的示例文件内容:

示例文件

config.json

{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } }

update.json

{"ID": "ABC", "GlossSeeAlso": ["ABC", "DEF"] }

Python实现代码

下面是完整的实现代码,我会一步步解释:

import json

def update_nested_dict(data, updates):
    """递归遍历字典,更新匹配的键值对"""
    for key, value in data.items():
        if key in updates:
            # 找到匹配的键,替换值
            data[key] = updates[key]
        # 如果当前值是字典,继续递归遍历深层结构
        elif isinstance(value, dict):
            update_nested_dict(value, updates)
    return data

# 加载config.json和update.json文件内容
with open('config.json', 'r') as f:
    config_data = json.load(f)

with open('update.json', 'r') as f:
    update_data = json.load(f)

# 执行更新操作
updated_config = update_nested_dict(config_data, update_data)

# 将更新后的内容写入新文件(也可以直接覆盖原config.json)
with open('updated_config.json', 'w') as f:
    json.dump(updated_config, f, indent=2)

# 打印结果验证
print(json.dumps(updated_config, indent=2))

代码解释

  1. 递归函数update_nested_dict:核心逻辑都在这里,它会逐层遍历字典,每遇到一个键就检查是否在更新列表里,如果匹配就替换对应的值;如果当前值还是嵌套的字典,就继续递归进去查找,确保能处理任意深度的嵌套结构。
  2. 加载JSON文件:用json.load()把两个JSON文件的内容转换成Python字典,方便后续操作。
  3. 执行更新:调用递归函数,把config字典和更新字典传入,完成键值替换。
  4. 保存结果:用json.dump()把更新后的字典写入文件,indent=2参数是为了让输出的JSON格式更工整,方便阅读。

执行结果

运行代码后,你会得到符合预期的更新结果:

{
  "glossary": {
    "title": "example glossary",
    "GlossDiv": {
      "title": "S",
      "GlossList": {
        "GlossEntry": {
          "ID": "ABC",
          "SortAs": "SGML",
          "GlossTerm": "Standard Generalized Markup Language",
          "Acronym": "SGML",
          "Abbrev": "ISO 8879:1986",
          "GlossDef": {
            "para": "A meta-markup language, used to create markup languages such as DocBook.",
            "GlossSeeAlso": [
              "ABC",
              "DEF"
            ]
          },
          "GlossSee": "markup"
        }
      }
    }
  }
}

这个方案的前提是你保证update.json里的键都是唯一的,不会出现多个相同键在不同层级的情况,这样就不会有更新冲突啦。

内容的提问来源于stack exchange,提问作者user1536782

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:04:14