jsoner允许您轻松地将类转换为json并返回。

jsoner的Python项目详细描述


jsoner

https://img.shields.io/travis/sschaffer92/jsoner.svgDocumentation StatusCoverage

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_dictfrom_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_strfrom_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上的第一个版本。

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

推荐PyPI第三方库


热门话题
手机上的html调试Java web应用程序   Java当前日期和过去日期之间的差值,以年、月、日、小时、分、秒为单位   如果方法名称相同,java如何使扩展类不从上面的类触发方法?   即使在提供了准确的firebase引用之后,java仍出现“无法跳转到类型”异常。请看详情   jar文件中的java图像   java如何避免从缓存读取时修改相同的对象实例?   Android中java完全控制的线程队列   JTextArea中的java计算   java如何独立运行。jar作为64位mashine上的32位   java在尝试实例化自引用泛型类的实例时,如何处理自引用类型参数   java如何安装着色jar而不是原来的jar   java在resultSet之后使用If-Else   多线程是java。朗,反思一下。方法调用线程安全   java 7语言向后兼容性   Objective C中的Category和Java 8中的Default方法是否等效?