如何用Python批量修改JSON嵌套列表中的FactionID值?
批量修改.git.json文件中嵌套列表的FactionID值
问题排查
- 你用
print(data['Creature List']['value']['FactionID']['value'])报错的核心原因:data['Creature List']['value']是列表类型,不是字典,必须遍历列表里的每个生物条目才能访问FactionID。 - 代码循环逻辑错误:
for creature in value:中的value是'Creature List'对应的字典(包含type和value键),应该遍历value['value']这个实际的生物列表。 - 文件写入时机不合理:每次修改一个条目就写文件,既低效又可能导致数据不一致,应该等所有条目修改完成后一次性写入。
修正后的代码
import os import json directory = "你的目标目录路径" # 替换成你要处理的实际目录 for filename in os.listdir(directory): if filename.endswith('.git.json'): file_path = os.path.join(directory, filename) try: # 读取JSON文件 with open(file_path, 'r') as f: data = json.load(f) # 安全获取Creature List下的生物列表,避免键不存在报错 creature_list = data.get('Creature List', {}).get('value', []) if not creature_list: print(f"{filename}里没有找到有效的Creature List") continue # 遍历每个生物条目,修改FactionID的值 modified = False for creature in creature_list: # 确保FactionID结构正确 if 'FactionID' in creature and isinstance(creature['FactionID'], dict) and 'value' in creature['FactionID']: creature['FactionID']['value'] += 46 modified = True print(f"{filename} - 修改后FactionID值: {creature['FactionID']['value']}") # 只有实际修改过内容才写入文件 if modified: with open(file_path, 'w') as f: json.dump(data, f, indent=4) print(f"已保存修改: {filename}") except (json.JSONDecodeError, FileNotFoundError, PermissionError) as e: print(f"处理{filename}出错: {e}")
关键修改说明
- 用
data.get()方法安全获取嵌套结构,避免因键不存在导致的崩溃。 - 直接遍历
creature_list(即'Creature List'下的value列表),每个元素是包含FactionID的字典。 - 增加
modified标记,只有实际修改了内容才写入文件,减少不必要的磁盘操作。 - 扩展异常捕获范围,处理权限不足等常见问题。
内容的提问来源于stack exchange,提问作者El Grillo
相关产品推荐
相关产品推荐

