如何使用Python动态读写修改JSON文件,满足游戏存档开发需求
实现方案
核心逻辑说明
JSON是纯文本结构化格式,原生不支持局部增量修改,所有修改指定字段的操作标准实现均为:将全量文件读入内存转为Python字典、修改字典对应字段、将修改后的字典全量覆写回原文件。游戏存档通常体积在KB级,全量读写开销可忽略,不存在效率问题。
读取函数实现
你之前的版本存在强制类型转换、无返回值、未自动关闭文件的问题,修正后的实现如下:
import json def json_read(path, element): with open(path, 'r', encoding='utf-8') as json_file: data = json.load(json_file) return data.get(element)
调用示例:user_level = json_read("save.json", "level"),即可拿到对应字段的值,字段不存在时会返回None,可根据需求调整为抛出异常。
字段修改函数实现
def json_change(path, element, change_type, change_value): # 读取全量存档数据 with open(path, 'r', encoding='utf-8') as f: data = json.load(f) if change_type == "replacement": data[element] = change_value elif change_type == "maths": if not isinstance(data.get(element), (int, float)): raise TypeError(f"字段{element}为非数值类型,无法执行数学运算") data[element] += change_value elif change_type == "var_addition": data[element] = change_value else: raise ValueError(f"不支持的修改类型:{change_type}") # 写回修改后的数据 with open(path, 'w', encoding='utf-8') as f: # ensure_ascii保证中文正常存储,indent增加可读性,不需要可删除 json.dump(data, f, ensure_ascii=False, indent=2)
补充注意事项
- 首次初始化存档时,需要先向目标路径写入合法的空JSON结构
{},避免读取时报错 - 如果要避免写入过程中崩溃损坏原存档,可以先写入到临时文件(如
save.json.tmp),写入完成后再替换原文件 - 当前实现默认支持一级JSON字段,如果需要支持
user.info.score这类嵌套字段,可以扩展element参数的层级解析逻辑
内容的提问来源于stack exchange,提问作者Toma400
相关产品推荐
相关产品推荐

