欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python中的序列化

程序员文章站 2022-06-16 10:32:45
...
  1. 把一个python对象序列化为jsom

    >>> import json
    >>> d = dict(name='Bob', age=20, score=88)
    >>> json.dumps(d)
    '{"age": 20, "score": 88, "name": "Bob"}'
    

    dumps()方法返回一个str,内容就是标准的JSON。类似的,dump()方法可以直接把JSON写入一个file-like Object。

    要把JSON反序列化为Python对象,用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化:

    >>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
    >>> json.loads(json_str)
    {'age': 20, 'score': 88, 'name': 'Bob'}
    
  2. 对于实例对象

    json.dumps(s, default=student2dict)
    #s为实例对象,可选参数default就是把一个实列对象
    变成一个可序列化为json的对象,
    而default的值就是一个实例对象转换为可序列化对象的转换函数
    

    不过,遇到的下一个实列对象,仍然无法序列化为json。
    那么有一个规则,把任意的class实例变为dict。

    json.dumps(s, default=lambda obj: obj.__dict__)
    
  3. 反序列为实例对象

    def dict2student(d):
    return Student(d['name'], d['age'], d['score'])
    

    把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象

    然后,我们传入的object_hook函数负责把dict转换为Student实例:

    >>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
    >>> print(json.loads(json_str, object_hook=dict2student))
    <__main__.Student object at 0x10cd3c190>