将python对象序列化并反序列化为json
soku的Python项目详细描述
索库
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.