json对象映射器/编码器

Medea的Python项目详细描述


用于将json映射到python对象和从python对象映射json的简单实用程序。

https://travis-ci.org/kevinbeaty/medea.png?branch=master

美地亚

medea是一个用于json编码的单分派函数。

列表、元组和序列转换为列表。 dict的项和值是递归调度的。 其他类型应在调度功能中注册。

medea.register(date,lambdaobj:obj.strftime('%Y-%m-%d'))dob=date(1974,3,1)assertmedea(dob)=='1974-03-01'bob={'name':'Bob','age':38,'colors':('blue','red'),'dob':dob}assertmedea(bob)=={'name':'Bob','age':38,'colors':['blue','red'],'dob':'1974-03-01'}

可以向映射器注册自定义对象:

classPet(object):passclassDog(Pet):def__init__(self,name):self.name=nameself.kind='Dog'classCat(Pet):def__init__(self,name):self.name=nameself.kind='Cat'classPetPerson(Person):passmedea.register(PetPerson,MedeaCamelMapper('first_name','last_name','pets'))medea.register(Pet,MedeaCamelMapper('name','kind'))anne=PetPerson('Anne','Frank')fido=Dog('Fido')spot=Dog('Spot')garfield=Cat('Garfield')anne.pets=[fido,spot,garfield]assertmedea(anne)=={'firstName':'Anne','lastName':'Frank','pets':[{'kind':'Dog','name':'Fido'},{'kind':'Dog','name':'Spot'},{'kind':'Cat','name':'Garfield'}]}

medea编码器

medeacoder是一个使用medea函数的jsonencoder。

medeamapper

使用python属性名作为参数创建映射器。属性是 未白名单将不会序列化:

classPerson(object):def__init__(self,first_name,last_name,address='',phone_number='',dob=''):self.first_name=first_nameself.last_name=last_nameself.address=addressself.phone_number=phone_numberself.dob=dobbob=Person('Bob','Hope','123 Main','123','1903-05-29')mapper=MedeaMapper('first_name','last_name','address','phone_number','dob')bob_json={'first_name':'Bob','last_name':'Hope','address':'123 Main','phone_number':'123','dob':'1903-05-29'}assertmapper.to_json(bob)==bob_json

可以使用**kwargs覆盖属性名。

bob=Person('Bob','Hope','123 Main','123','1903-05-29')mapper=MedeaMapper('address','dob',first_name='firstName',last_name='lastName')bob_json={'firstName':'Bob','lastName':'Hope','address':'123 Main','dob':'1903-05-29'}assertmapper.to_json(bob)==bob_json

如果json是驼峰大小写,medecamelmapper可能很有用。

bob=Person('Bob','Hope','123 Main','123','1903-05-29')mapper=MedeaCamelMapper('first_name','last_name','address','phone_number','dob')bob_json={'firstName':'Bob','lastName':'Hope','address':'123 Main','phoneNumber':'123','dob':'1903-05-29'}assertmapper.to_json(bob)==bob_json

映射器还可以将属性从json映射到对象:

bob=Person('Bob','Hope','123 Main','123','1903-05-29')bob_json_full={'firstName':'Bob','lastName':'Hope','address':'123 Main','phoneNumber':'123','DOB':'1903-05-29'}fred_json={'firstName':'Fred','lastName':'Rodgers'}mapper=MedeaCamelMapper('first_name','last_name')mapper_full=MedeaCamelMapper('first_name','last_name','address','phone_number',dob='DOB')assertmapper.to_json(bob)==bob_jsonassertmapper_full.to_json(bob)==bob_json_full# Override Bob's name from Fredmapper.from_json(fred_json,bob)# Mapper only serializes namesassertmapper.to_json(bob)==fred_jsonassertmapper_full.to_json(bob)!=bob_json_fullassertbob.first_name=='Fred'assertbob.last_name=='Rodgers'assertbob.address=='123 Main'assertbob.phone_number=='123'assertbob.dob=='1903-05-29'# Revert back to Bob's namemapper.from_json(bob_json,bob)assertmapper.to_json(bob)==bob_jsonassertmapper_full.to_json(bob)==bob_json_full

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

推荐PyPI第三方库


热门话题
如何使用Java中的扫描仪读取文本文件中的特定字符?   java如果我们在hibernate中开始事务但不提交它,会发生什么?   Azure CosmosDB Java Springboot中的无服务器帐户不支持spring boot设置提供吞吐量或容器自动导航   附加到新对象的Java注释?   java如何将自定义文本视图添加到。在Kotlin中添加通知操作   java Shibboleth添加_OpenSAMLcookies,导致HTTP头大小>8k   分布式传感器数据(~40Hz)的高效Java观测器设计   java如何在while循环外声明数组,但在while循环中初始化它?   用@XmlElementRef注释的java元素没有显示在JAXB编组字符串中?   java替换二维数组的值   java如何在任务栏上创建Windows7加载栏   java如何在组件注释bean中使用会话或RequestScope bean?   java netbeans freermarker插件错误:在实现版本中请求netbeans桥的插件Lexer   java谷歌地图方向。加载失败,返回服务器错误   java当我试图递归地计算两个值之间的整数之和时,为什么结果返回一个奇怪的值?   java如何通过html文件的用户获取运行时输入,以使用Jsoup进行解析?