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

JsonDF包Python自定义序列化与反序列化:如何重建对象实例?

问题:自定义JSON工具包的反序列化实现

我正在开发JsonDF包,目前已支持以下JSON操作:

  • 为JSON添加带值的键
  • 删除JSON中的键
  • 导出JSON中键对应的值
  • 更新JSON中键的值
  • 根据键搜索特定值

现在想基于该包的JSON对象实现外部对象的序列化与反序列化:序列化器独立于JSON对象但依赖它,当前序列化环节已正常工作,但反序列化时遇到问题——无法从输出的JSON重建未预先编码的类实例(比如示例中的Person类),现有代码只能生成带属性的JSON对象,无法还原类的方法及完整实例。

示例

序列化前的Python类

class Person:
    def __init__(self, name):
        self.name = name

序列化后的JSON

{
    "name": "Person",
    "__init__": {
        "params": [
            "name" 
        ],
        "self": {
             "name": "params.name"
        }
    }
}

需要将上述JSON反序列化为原Python类的实例。


解决思路与实现

1. 核心步骤

要重建类实例,需从JSON中提取类元信息,动态还原类结构并完成实例化:

  • 解析类名、初始化方法参数、属性映射关系
  • 动态创建或定位目标类
  • 根据参数与属性映射完成实例化

2. 代码实现

import json

def deserialize(json_str):
    data = json.loads(json_str)
    class_name = data['name']
    init_info = data['__init__']
    params = init_info['params']
    attr_map = init_info['self']

    # 定义类的初始化方法
    def __init__(self, *args, **kwargs):
        param_dict = dict(zip(params, args))
        param_dict.update(kwargs)
        # 解析属性映射并赋值
        for attr, expr in attr_map.items():
            # 处理"params.name"这类参数引用格式
            param_key = expr.split('.')[1]
            setattr(self, attr, param_dict[param_key])

    # 动态创建目标类
    target_class = type(class_name, (object,), {'__init__': __init__})
    
    # 示例:假设参数值可从JSON扩展字段获取,这里模拟传入参数
    # 实际场景中可在序列化时额外保存参数值,反序列化时直接读取
    instance = target_class("Alice")
    return instance

# 测试反序列化
json_data = '''{
    "name": "Person",
    "__init__": {
        "params": [
            "name" 
        ],
        "self": {
             "name": "params.name"
        }
    }
}'''

person = deserialize(json_data)
print(person.name)  # 输出: Alice
print(type(person).__name__)  # 输出: Person

3. 扩展优化点

  • 如果目标类已存在于当前环境,可跳过动态创建步骤,直接通过类名导入并实例化
  • 若类包含其他方法或继承关系,需在序列化时额外保存这些信息,反序列化时一并还原
  • 复杂属性表达式需完善解析逻辑,避免使用eval()带来的安全风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:53:18