Python教程

Python学习之对象序列化和反序列化

本文主要是介绍Python学习之对象序列化和反序列化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Python学习之对象序列化和反序列化

  • 序列化
  • 反序列化

序列化

可以用 json__dict__ 方法来实现序列化,对象被序列化后,其类型的是一个 str
语法:

json.dumps(对象, 序列化方法)

dumps 会将 对象 传递给序列化方法,然后序列化方法将内容以字典的方式传回,最后 dumps 将序列化之后的结果转换成一个 str

例:

import json


class Student(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age


def ser(obj):
    return obj.__dict__  # 返回对象字典


if __name__ == '__main__':
    s = Student("张三", 18)
    # 进行序列化,default是指定获取字典格式的序列化方法,ensure_ascii是禁止使用ASCII码方式
    ret = json.dumps(s, default=ser, ensure_ascii=False)
    print('序列化之后的内容:{}, 类型是:{}'.format(ret, type(ret)))

运行结果:

序列化之后的内容:{"name": "张三", "age": 18}, 类型是:<class 'str'>

反序列化

例:

import json


class Student(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age


def ser(obj):
    print(type(obj.__dict__))
    return obj.__dict__  # 返回对象字典

# 反序列化函数
def hook(_dict):
    return Student(_dict['name'], _dict['age'])


if __name__ == '__main__':
    s = Student("张三", 18)
    # 序列化
    ret = json.dumps(s, default=ser, ensure_ascii=False)
    print('序列化之后的内容:{}, 类型是:{}'.format(ret, type(ret)))

    # 反序列化
    obj = json.loads(ret, object_hook=hook)
    print('反序列化之后的对象:{}, 类型是:{}'.format(obj, type(obj)))

运行结果:

<class 'dict'>
序列化之后的内容:{"name": "张三", "age": 18}, 类型是:<class 'str'>
反序列化之后的对象:<__main__.Student object at 0x0000026EFD3C34F0>, 类型是:<class '__main__.Student'>
这篇关于Python学习之对象序列化和反序列化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!