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

被折叠的 条评论
为什么被折叠?



