jsoner允许您轻松地将类转换为json并返回。
jsoner的Python项目详细描述
jsoner
- 自由软件:麻省理工学院许可证
- 文档:https://jsoner.readthedocs.io。
jsoner是一个旨在简化与json之间的转换的包。
安装
稳定释放
要安装jsoner,请在终端中运行此命令:
$ pip install jsoner
这是安装jsoner的首选方法,因为它总是安装最新的稳定版本。
来源
jsoner的源代码可以从Github repo下载。
您可以克隆公共存储库:
$ git clone git://github.com/sschaffer92/jsoner
或者下载tarball:
$ curl -OL https://github.com/sschaffer92/jsoner/tarball/master
一旦您有了源代码的副本,就可以使用以下命令安装它:
$ python setup.py install
使用量
jsoner构建在内置的{em1}$jsonpython包上。因为不能通过 默认情况下,有一个很好的方法这样做是很有用的。这个包提供了三种不同的方法 实现此目标:
- 提供to_dict和from_dict方法:
fromjsonerimportdumps,loadsclassA:def__init__(self,a):self.a=adefto_dict(self)->dict:return{'a':self.a}@classmethoddeffrom_dict(cls,data:dict)->'A':returnA(**data)a=A(42)data=dumps(a)a=loads(data)
- 或者提供一个to_str和from_str方法:
fromjsonerimportdumps,loadsclassA:def__init__(self,a):self.a=adefto_str(self)->str:returnstr(self.a)@classmethoddeffrom_str(cls,data:str)->'A':returnA(data)a=A('foo')data=dumps(a)a=loads(data)
- 或者实现一个转换函数对(如果 您没有直接访问类定义的权限:
fromjsonerimportdumps,loadsfromjsonerimportencoders,decodersclassA:def__init__(self,a):self.a=a@encoders.register(A)defencode_a(a:'A')->str:returna.a@decoders.register(A)defdecode_a(data:str)->str:returnA(data)a=A('foo')data=dumps(a)a=loads(data)
jsoner还可以处理嵌套对象,只要它们也可以按上述方式序列化。
芹菜和django
jsoner包的一个很好的用例是任务和任务结果的celeriy序列化。
要使芹菜使用jsoner可以应用以下设置:
fromceleryimportappfromkombuimportserializationfromjsonerimportdumps,loads# register Jsonerserialization.register('jsoner',dumps,loads,content_type='application/json')app=Celery('Test')# tell celery to use Jsonerapp.conf.update(accept_content=['jsoner'],task_serializer='jsoner',result_serializer='jsoner',result_backend='rpc')# Celery can now serialize objects which can be serialized by Jsoner.classA:def__init__(self,foo):self.foo=foo@classmethoddeffrom_dict(cls,data:dict)->'A':returnA(**data)defto_dict(self):return{'foo':self.foo}a=A('bar')@app.taskdeftask(obj:A)->'A':...returnobja=task.delay(a).get()
这样就可以轻松地序列化django模型实例并将它们传递给 芹菜任务。
fromdjango.dbimportmodelsclassPerson(models.Model):first_name=models.CharField(max_length=30)last_name=models.CharField(max_length=30)
然后您可以直接将模型传递给芹菜任务:
fromdjango.db.modelsimportModelfromjsonerimportencoders,decodersfrom.modelsimportPerson# Create a conversion function pair which just saved the primary key.@encoders.register(Model)defto_primary_key(model:Model)->int:returnmodel.pk# Load object from the primary key.@decoders.register(Model)deffrom_primary_key(pk:int,model_cls:Model)->Model:returnmodel_cls.objects.get(pk=pk)p=Person(first_name="Foo",last_name="Bar")p=task.delay(p).get()
类似地,您可以为querysets创建一个转换函数对。
历史记录
0.1.0(2019-02-18)
- pypi上的第一个版本。