Python对象(反)序列化程序
pyrializer的Python项目详细描述
吡咯烷酮
Python对象(反)序列化程序
安装
$ pip install pyrializer
基本用途
必须定义类并描述使用什么属性及其类型 类属性如下:
^{pr2}$参见下面的Supported types。在
从序列化值解码
解码对象会将序列化值映射到Python对象:
frompyrializerimportdecodepayload={'name':'John Doe','age':52,'job':{'name':'Software Engineer','salary':24000},'hobbies':['fishing','skating']}classJob:name=strrole=strsalary=intclassAddress:desc=strcity=strcountry=strzip=intclassPerson:name=strage=intjob=Jobhobbies=[str]address=Addressperson=decode(Person,payload)person.name# John Doeperson.job.salary# 24000person.job.role# Noneperson.hobbies[1]# skatingperson.address.city# None
对序列化值进行编码
对对象进行编码将Python对象转换为可序列化的格式,该格式可以 可轻松导出为其他格式,如JSON:
frompyrializerimportencodeencode(Person,person)# --> { 'name': 'John Doe', ... }
另外,您可以装饰要用(反)序列化的类
serializable
装饰器。这个修饰符用两个
其他方法:
frompyrializerimportserializable@serializableclassPerson:...person=Person.decode(person_payload)person.encode()# --> { 'name': 'John Doe', ... }
支持的类型
下面是一些受支持类型的示例
<type> | JSON equivalent |
---|---|
^{ | Any type |
^{ | String |
^{ | Integer |
^{ | Float |
^{ | Boolean |
^{ | Array of any type |
^{ | Object |
Custom type | Any. See Custom types below. |
更高级的示例:
classExample:array_of_array_of_ints=[[int]]# [ [1,2], [3, 4], [], [5, 6] ]whatever=None# 42, False, AnotherObject(), etc...
自定义类型
自定义类型允许对以前使用 基本类型和方便的格式。在
一些例子包括:
- Unix时间戳:编码为整数的日期
- ISO-8601:编码为字符串的日期
- 性别:编码为男性或女性
要声明自定义类型,您需要创建一个继承CustomType
的类
并定义了两个方法:decode
和{
例如,下面的代码段声明了一个自定义类型来解码ISO-8601 日期到Python的datetime对象中,反之亦然。在
fromjsonimportloadsfromdatetimeimportdatetimefrompyrializerimportserializablefrompyrializer.typesimportCustomTypeclassISO_8601(CustomType):defdecode(self,fvalue):returndatetime.strptime(fvalue,'%Y-%m-%dT%H:%M:%SZ')defencode(self,fvalue):returndatetime.strftime(fvalue,'%Y-%m-%dT%H:%M:%SZ')@serializableclassPerson:name=strbirthdate=ISO_8601# here we use the custom typejson_payload=json_loads('''{ "name": "John Doe", "birthdate": "1984-01-23T09:37:21Z"}''')person=Person.decode(payload)print(type(person.birthdate))# <class 'datetime.datetime'>print(person.birthdate.year)# 1984print(person.encode())# {'name': 'John Doe', 'birthdate': '2000-01-23T09:37:21Z'}
- 项目
标签: