python中的序列化
程序员文章站
2022-06-16 10:32:45
...
-
把一个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'}
-
对于实例对象
json.dumps(s, default=student2dict) #s为实例对象,可选参数default就是把一个实列对象 变成一个可序列化为json的对象, 而default的值就是一个实例对象转换为可序列化对象的转换函数
不过,遇到的下一个实列对象,仍然无法序列化为json。
那么有一个规则,把任意的class实例变为dict。json.dumps(s, default=lambda obj: obj.__dict__)
-
反序列为实例对象
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>
上一篇: 关于WPF的资源引用问题
下一篇: markdown学习与使用语法