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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:18:01