Python之数据序列化(json、pickle、shelve)(5)

说明: 经过测试发现MyJSONDecoder().decode(JSON_STR) 和 json.loads(JSON_STR, object_hook=dict2obj) 只能在Python 2.7上正确执行,在Python 3.5上无法正确执行;而 json.loads(JSON_STR, cls=MyJSONDecoder) 无论在Python 2.7还是在Python 3.5上都无法正确执行。这说明json模块对于自定义数据类型的反序列化支持还是比较有限的,但是我们也可以通过json.loads(JSON_STR)函数,不指定cls参数来得到一个dict对象,然后自己完成dict到object的转换。

继承JSONEncoder实现序列化时还有一个额外的作用,就是可以通过iterencode()方法把一个很大的数据对象分多次进行序列化,这对于网络传输、磁盘持久化等情景非常有用。

>>> for chunk in MyJSONEncoder().iterencode(stu): ... print(chunk) ... { "__class__" : "Student" , "name" : "Tom" , "__module__" : "__main__" , "sno" : 1 , "age" : 19 }

大数据对象序列化网络传输伪代码:

for chunk in JSONEncoder().iterencode(bigobject): mysocket.write(chunk)

更多详情见请继续阅读下一页的精彩内容

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e8e72237eab994e7948d4317d8f7641a.html