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

如何反序列化动态复杂JSON对象以适配模块化Python Game对象

核心原因是序列化阶段没有保留自定义类的元信息,导致反序列化时无法区分普通字典和自定义类实例的序列化结果,以下是无侵入、适配模块化系统的完整实现方案:

序列化逻辑优化

在原有序列化逻辑基础上,为每个自定义对象补充类元信息,无需修改任何原有业务代码:

import json
import importlib

def serialize_handler(o):
    return {
        "__class__": o.__class__.__name__,
        "__module__": o.__module__,
        **o.__dict__
    }

# 序列化调用示例,替换你原有的dumps逻辑即可
save_json = json.dumps(G, indent=4, default=serialize_handler)

动态反序列化实现

反序列化时通过元信息动态加载类、创建实例,不需要在任何类的__init__中硬编码逻辑:

def deserialize_handler(d):
    # 仅处理带类元信息的自定义对象序列化结果
    if "__class__" in d and "__module__" in d:
        class_name = d.pop("__class__")
        module_path = d.pop("__module__")
        # 动态导入类所在的模块
        target_module = importlib.import_module(module_path)
        target_cls = getattr(target_module, class_name)
        # 用__new__创建实例,跳过__init__执行,不需要适配原有类的初始化参数
        instance = target_cls.__new__(target_cls)
        # 直接批量写入所有属性
        instance.__dict__.update(d)
        return instance
    # 普通字典、基础类型直接返回
    return d

# 反序列化调用示例
with open("game_save.json", "r", encoding="utf-8") as f:
    G = json.load(f, object_hook=deserialize_handler)

方案特性

  • 完全无侵入:不需要修改任何原有业务类的代码,适配模块化动态扩展需求
  • 自动处理嵌套结构:不管是顶层Game对象的属性,还是字典、列表中嵌套的任意层级自定义对象都能正确反序列化
  • 原生兼容基础类型:字符串、数字、列表、普通字典等Python原生类型不需要额外适配
  • 扩展灵活:如果有特殊类需要自定义反序列化逻辑,只需在deserialize_handler中补充对应判断即可,不需要改动全局逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:54:05