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 typeAny. 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'}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么这个循环打印1020之间的所有值?我想让它打印出可以被5整除的值   java如何在JTable中集中单元格   java无法通过一个键从hashmap获取对象,该键具有相同的hashcode,并且两个键等于()   不兼容的类型?JAVA   将字符串开头与空格匹配时java replaceAll的正则表达式混淆结果   java为非java应用程序创建jar文件。类文件   java无法从另一个普通Http Servlet访问筛选器Servlet的会话属性   java Ejb,第二个方法中的错误回滚第一个方法   swing java操作侦听器在菜单上,而不是在菜单项上   分析文件时出错:分析文件时出错:无法在Java的XSSF中分析excel文件   java将实体注入到ViewScope Bean中   java如何关闭终端而不终止正在运行的jar文件进程   爪哇力下传   java不能隐式地将[T]强制转换为AT,其中[T]扩展为AT   java Spring项目在jsp页面中显示mysql表数据   java在创建新实例SQLITE时出错