python序列化辅助函数

这篇博客介绍了一个万能的Python序列化辅助函数,能够处理类对象、嵌套数据结构以及各种库生成的对象。当普通序列化方法无法应对复杂情况时,这个辅助函数通过提取类对象的字典属性,支持列表、元组和字典中的类对象,解决了序列化的难题。示例展示了如何使用此辅助函数,使得JSON序列化变得更加灵活和强大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

万能的python序列化辅助函数

摘要:可以支持列表元组里面的类对象,支持字典中的类对象,支持类对象中的类对象,
支持各种库生成的对象,例如 ObjectId, UUID, MD5, datetime 等。

问题

问题: 普通情况下使用json 进行序列化的时候,遇到不同的类的对象就往往很难实现序列化,尤其是在各种数据结构进行嵌套的时候

那么就想到了通用的解决方式。

解决方式

每个类都定制化实现 __dict__ 或者不实现也可以。

就可以使用下面的辅助函数来进行序列化:

# python 2

class Utils(object): 


    @classmethod
    def remove_unserializable(cls, items):

        serializable = (list, dict, tuple, str, unicode, int, long, float, True, False, None)
        new_item = items

        if isinstance(items, dict):
            new_item = {}
            for k, v in items.iteritems():
                new_item[k] = cls.remove_unserializable(v)

        if isinstance(items, (list, tuple)):
            new_item = list()
            for item in items:
                new_item.append(cls.remove_unserializable(item))

        if type(items) not in serializable:
            try:
                if hasattr(items, "__dict__"):
                    return cls.remove_unserializable(getattr(items, "__dict__"))
                else:
                    return str(items)
            except:
                pass
        return new_item

其中最主要的就是这一行代码了:

items = {}  # 某个类的 字典属性返回值
if hasattr(items, "__dict__"):
    return cls.remove_unserializable(getattr(items, "__dict__"))

这行代码可以把类的字典中嵌套的各种类型的的对象属性提取出来,以字典的形式出现

同时,上面的辅助函数支持解析列表,元组 这两种序列,对于简单的python类型则是直接返回

然后最后,功能强大的辅助函数就诞生了!

使用的时候可以像下面这样!


import json

json.dumps(whatever, default=Utils.remove_unserializable)

最后

总结一下支持:可以支持列表元组里面的类对象,支持字典中的类对象,支持类对象中的类对象,
支持各种库生成一些Id 例如 ObjectId, UUID, MD5

如果需要,可以根据具体环境,修改辅助函数,然后通用的json序列化函数就来了,再也不用只是用 __dict__

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值