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变量始终存储0值。为什么?   如何使用Java/REST将Azure blob从一个存储容器移动到另一个存储容器?   java将commons DBCP从1.2升级到1.4,我应该害怕吗?   java如何使用分隔符拆分字符串?   java使用数组读取json对象   java在groovy中切片字符串   交换数组java的两个邻域元素   java移动用于确定字符串是否为回文的逻辑   java Android应用程序在一个活动中崩溃   java Sparkjava将webapp文件夹设置为静态资源/模板的文件夹   java复杂条件表达式,用户易用。   java如何仅在表存在时从表中选择值   java I无法将数据从Recyclerview传递到其他活动   java数据结构最佳设计(大数据)   java Android从DatePickerDialogFragment中删除日历视图   java将数据从Firebase获取到片段   数组。sort()在java中运行不正常