在我的应用中,序列化就是把类转成符合JSON格式的字符串,反序列化就是把JSON格式的字符串转换成类。C#的话直接用Newtonsoft.JSON就可以了,非常好用。本来以为python也会有类似的库,但是貌似并没有。网上查了一些python用来实现JSON序列化和反序列化的方法,用的最多的就是json.loads, json.dumps。
# 序列化:将Python对象转换成json字符串 dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw) # 反序列化:将json字符串转换成Python对象 loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
# 序列化:将Python对象转换成json字符串并存储到文件中 dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw) # 反序列化:读取指定文件中的json字符串并转换成Python对象 load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
包含自定义类的序列化例子:
from typing import List class Address: def __init__(self,country,city): self.country=country self.city=city class Student: def __init__(self,name,age,sex,address): self.name=name self.age=age self.sex=sex self.address=address class School: def __init__(self,name,address:Address,students:List[Student]): self.name=name self.address=address self.students=students import json addr1=Address('China','Beijing') stu1=Student('lily',20,'female',Address('China','Shanghai')) stu2=Student('tom',23,'male',Address('China','Shenzhen')) sch1=School('MathSchool',addr1,[stu1,stu2]) # 先把python对象转换为dict对象,进而才能实现序列化 json_data=json.dumps(sch1,default=lambda o:o.__dict__,indent=2) print(json_data)
输出结果为:
{ "name": "MathSchool", "address": { "country": "China", "city": "Beijing" }, "students": [ { "name": "lily", "age": 20, "sex": "female", "address": { "country": "China", "city": "Shanghai" } }, { "name": "tom", "age": 23, "sex": "male", "address": { "country": "China", "city": "Shenzhen" } } ] }