将python对象序列化并反序列化为json

soku的Python项目详细描述


索库

Codacy BadgeCodacy Badge

soku是一个小库,用于将python对象序列化和反序列化为json并返回。 此库对于微服务之间的对话非常有用,请参见示例。 它可以从对象进行序列化并在反序列化时进行验证,还可以使用自定义反序列化程序和序列化程序。

安装

pip install soku

示例

fromdatetimeimportdatetimefromdataclassesimportdataclassfromsokuimportClass,Attributedefis_int(_,value):# validator must be callable and return bool or raise exceptionreturnisinstance(value,int)deftimestamp_to_date(value):returndatetime.fromtimestamp(value)defdate_to_timestamp(value):returnint(value.timestamp())@dataclassclassFullName(Class):first_name:str=Attribute(key='firstName')last_name:str=Attribute(key='lastName')deffull_name(self):returnf'{self.first_name}{self.last_name}'@dataclassclassPerson(Class):id:int=Attribute(validate=is_int)full_name:FullName=Attribute(key='fullName',attach=FullName)@dataclassclassUser(Person):birthday:datetime=Attribute(deserialize=timestamp_to_date,serialize=date_to_timestamp)if__name__=='__main__':# create instance and serializefull_name=FullName('John','Smith')user=User(12345,full_name,datetime.fromtimestamp(1193875200))print(user.serialize())#  {'id': 12345, 'birthday': 1193875200, 'fullName': {'firstName': 'John', 'lastName': 'Smith'}}# deserialize and serializeuser=User.deserialize({'id':12345,'birthday':1193875200,'fullName':{'firstName':'John','lastName':'Smith'}})print(user.full_name.full_name())# John Smithprint(user.serialize())# {'id': 12345, 'birthday': 1193875200, 'fullName': {'firstName': 'John', 'lastName': 'Smith'}}# validatetry:User.deserialize({'id':'12345','birthday':1193875200,'fullName':{'firstName':'John','lastName':'Smith'}})exceptValueErrorasexc:print(exc)# Key id validation error.

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

推荐PyPI第三方库


热门话题
安卓中通过TCP发送时java文件损坏   Java测试预期=异常失败,断言错误   java ssh4 LazyInitializationException   java是否可以在集合中添加重复项?   java是一个免费的开源数据库管理工具   java是否可以在导出的html中嵌入图像   编译器构造解释一些东西,并用Java运行生成的字节码?   java KeyPairGenerator未生成随机密钥   java使用正则表达式生成字符串而不是匹配字符串   java中的多线程线程间通信   具有复合密钥的java Hibernate合并问题   java不能在MainActivity类之外使用SharedReferences变量   正在获取切割/零件异常消息。使用java Spring ControllerAdvice   java tomcat漏洞讨论   javascript在Java中实现“system”命令   java如何在JUnit5*中加载*Spring测试上下文之前获取回调?   java bluej关于缺少返回语句   JavaSpringBoot@ModelAttribute包含使用字符串键的其他模型   从可选中抛出异常。ifPresent()Java 8