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

如何使用Python更新JSON文件中的指定父级键名

需求说明

现有JSON文件包含901、9x1、9x2三个顶层键,需要按以下规则重命名键名:

  • 将键9x1重命名为911
  • 将键9x2重命名为912

原有实现代码无法得到正确结果,错误代码如下:

tot = [911,912]
data = "above mentioned json file"
    for j in data:
        for i in tot:
           if j == '9x1':
             data[j][0] = i

待修改的原始JSON内容:

{
  "901": [
    {
      "section": "Revision",
      "section": "Appendix A",
      "section": "Region Code",
      "Table": "Region",
      "Bundle": "1.0.0.9",
      "Software": "1.0.0.2",
      "iOS Simulator": "1.1.1.1",
      "Configuration": "1.0.0.1"
    }
  ],
  "9x1": [
    {
      "section": "Revision",
      "section": "Appendix A",
      "section": "Region Code ",
      "Table": "Region",
      "Bundle": "1.0.0.9",
      "Software": "1.0.0.2",
      "iOS Simulator": "1.1.1.1",
      "Configuration": "1.0.0.1"
    }
  ],
  "9x2": [
    {
      "section": "Revision",
      "section": "Appendix A",
      "section": "Region Code",
      "Table": "Region",
      "Bundle": "1.0.0.9",
      "Software": "1.0.0.2",
      "iOS Simulator": "1.1.1.1",
      "Configuration": "1.0.0.1"
    }
  ]
}
原有代码问题
  • 没有将JSON内容解析为Python字典对象,直接把字符串赋值给data后,遍历data只会逐个获取字符串中的单个字符,根本访问不到JSON的顶层键名。
  • Python字典的键无法直接修改,原有代码中data[j][0] = i的逻辑是在修改键对应列表的第一个元素,完全不是修改键名的操作。
  • 逻辑仅判断了9x1的场景,没有处理9x2的重命名;且tot列表中存储的是整数,和字符串类型的键名类型不匹配,即使逻辑路径正确也会触发类型错误。
正确实现代码

通过json模块解析JSON内容,用键映射表统一处理重命名逻辑,用pop方法取出旧键对应值的同时删除旧键,再赋值给新键即可完成重命名,不会改动键对应的内部内容。

import json

# 从文件读取JSON时启用这段代码
# with open("你的json文件路径.json", "r", encoding="utf-8") as f:
#     data = json.load(f)

# 直接使用示例JSON做演示
data = {
  "901": [
    {
      "section": "Revision",
      "section": "Appendix A",
      "section": "Region Code",
      "Table": "Region",
      "Bundle": "1.0.0.9",
      "Software": "1.0.0.2",
      "iOS Simulator": "1.1.1.1",
      "Configuration": "1.0.0.1"
    }
  ],
  "9x1": [
    {
      "section": "Revision",
      "section": "Appendix A",
      "section": "Region Code ",
      "Table": "Region",
      "Bundle": "1.0.0.9",
      "Software": "1.0.0.2",
      "iOS Simulator": "1.1.1.1",
      "Configuration": "1.0.0.1"
    }
  ],
  "9x2": [
    {
      "section": "Revision",
      "section": "Appendix A",
      "section": "Region Code",
      "Table": "Region",
      "Bundle": "1.0.0.9",
      "Software": "1.0.0.2",
      "iOS Simulator": "1.1.1.1",
      "Configuration": "1.0.0.1"
    }
  ]
}

# 定义新旧键名的映射关系,后续要加其他重命名规则直接改这个字典就行
key_map = {
    "9x1": "911",
    "9x2": "912"
}

# 执行重命名
for old_key, new_key in key_map.items():
    if old_key in data:
        data[new_key] = data.pop(old_key)

# 处理完写回文件时启用这段代码
# with open("你的json文件路径.json", "w", encoding="utf-8") as f:
#     json.dump(data, f, indent=2, ensure_ascii=False)

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

注:你提供的原始JSON中,每个数组内的对象存在三个同名section键,标准JSON解析时会默认保留最后一个同名字段的值。如果需要保留所有section内容,需要调整JSON结构将section改为数组类型,这部分和本次顶层键重命名需求无关,可按需处理。

处理结果

处理完成后,JSON的三个顶层键会变为901、911、912,所有键对应的内部内容和原文件完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:03:20