栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使simplejson可序列化类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使simplejson可序列化类

您不能使用序列化任意对象

simplejson
。您需要将
default
和传递
object_hook
dump
load
。这是一个例子:

class SerializerRegistry(object):    def __init__(self):        self._classes = {}    def add(self, cls):        self._classes[cls.__module__, cls.__name__] = cls        return cls    def object_hook(self, dct):        module, cls_name = dct.pop('__type__', (None, None))        if cls_name is not None: return self._classes[module, cls_name].from_dict(dct)        else: return dct    def default(self, obj):        dct = obj.to_dict()        dct['__type__'] = [type(obj).__module__,     type(obj).__name__]        return dctregistry = SerializerRegistry()@registry.addclass A(object):    def __init__(self, item1):        self.item1 = item1    def __repr__(self):        return str(self.__dict__)    def to_dict(self):        return dict(item1=self.item1)    @classmethod    def from_dict(cls, dct):        return cls(**dct)s = json.dumps(A(1), default=registry.default)a = json.loads(s, object_hook=registry.object_hook)

结果是:

>>> s'{"item1": 1, "__type__": ["__main__", "A"]}'>>> a{'item1': 1}

但是,您真正需要的是一个

default
从希望序列化的对象创建字典的函数,以及一个
object_hook
如果字典不够用的函数,当给定字典时,该对象将返回一个(正确类型的)对象。最好的方法是在可序列化类上具有从对象创建字典并将其构造回去的方法,并且还具有识别字典所属的类的映射。

您还可以将标识符添加到类中,以用作的索引

_classes
。这样,如果您要上课,就不会有问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号