JSON可序列化对象

lindh-jsonobject的Python项目详细描述


https://travis-ci.org/eblade/jsonobject.svg?branch=master

lindh jsonobject

json可序列化python3对象。

简介

使用lindh.jsonobject的目的是提供序列化和 将python3对象反序列化为json和从json反序列化python3对象,以便它们可以进行通信 与其他应用程序一起存储到文档数据库中,如couchdb。

一些代码和灵感来自django项目,对象的行为 很像这样。然而,尽管django对象是针对关系数据库的, 这些对象用于文档数据库中的复杂对象。

依赖性

除了核心python3.6之外,没有其他依赖项

安装

此存储库可以使用pip安装。

pip install lindh-jsonobject

示例

>>>fromjsonimportdumps>>>fromlindh.jsonobjectimportProperty,PropertySet,EnumProperty>>>classWheel(PropertySet):...diameter=Property(float,default=1.)>>>classRating(EnumProperty):...ok='ok'...bad='bad'...good='good'>>>classCar(PropertySet):...wheels=Property(type=Wheel,is_list=True)...brand=Property()...model=Property()...rating=Property(enum=Rating,default=Rating.ok)>>>volvo=Car(brand='Volvo',model='V70',rating=Rating.good)>>>print(volvo.to_json()){"*schema":"Car","brand":"Volvo","model":"V70","rating":"good","wheels":[]}>>>volvo.wheels.append(Wheel(diameter=2.))>>>print(volvo.to_json()){"*schema":"Car","brand":"Volvo","model":"V70","rating":"good","wheels":[{"*schema":"Wheel","diameter":2.0}]}>>>volvo.wheels.append(Wheel(diameter=2.))>>>print(volvo.to_json()){"*schema":"Car","brand":"Volvo","model":"V70","rating":"good","wheels":[{"*schema":"Wheel","diameter":2.0},{"*schema":"Wheel","diameter":2.0}]}>>>volvo.wheels.append(Wheel(diameter=2.))>>>volvo.wheels.append(Wheel())# using default value here>>>print(volvo.to_json()){"*schema":"Car","brand":"Volvo","model":"V70","rating":"good","wheels":[{"*schema":"Wheel","diameter":2.0},{"*schema":"Wheel","diameter":2.0},{"*schema":"Wheel","diameter":2.0},{"*schema":"Wheel","diameter":1.0}]}>>>volvo2=Car.FromJSON(volvo.to_json())>>>print(volvo2.to_json()){"*schema":"Car","brand":"Volvo","model":"V70","rating":"good","wheels":[{"*schema":"Wheel","diameter":2.0},{"*schema":"Wheel","diameter":2.0},{"*schema":"Wheel","diameter":2.0},{"*schema":"Wheel","diameter":1.0}]}

类型提示

如果可用,还可以使用类型提示为属性指定类型:

>>>fromjsonimportdumps>>>fromtypingimportList>>>fromlindh.jsonobjectimportProperty,PropertySet,EnumProperty>>>classWheel(PropertySet):...diameter:float=Property(default=1.)>>>classRating(EnumProperty):...ok='ok'...bad='bad'...good='good'>>>classCar(PropertySet):...wheels:List[Wheel]=Property()...brand=Property()...model=Property()...rating:Rating=Property(default=Rating.ok)>>>volvo=Car(brand='Volvo',model='V90',rating=Rating.good,wheels=[])>>>volvo.wheels.append(Wheel(diameter=3.))>>>print(volvo.to_json()){"*schema":"Car","brand":"Volvo","model":"V90","rating":"good","wheels":[{"*schema":"Wheel","diameter":3.0}]}

支持的类型:

  • ^{tt3}$
  • ^{tt4}$
  • ^{tt5}$
  • ^{tt6}$
  • ^{tt7}$
  • ^{tt8}$ where ^{tt9}$ is a subclass of ^{tt10}$
  • ^{tt9}$ where ^{tt9}$ is a subclass of EnumProperty

无模式

还有一个“无模式”模式,可以在下面找到 lindh.jsonobject.noschema。其目的是提供一个易于使用的只读 类似linq的方式来探索类似json的文件。下面是一个小例子:

>>>fromlindh.jsonobjectimportDictionary>>>d=Dictionary.load('tests/test.json')>>>palle=(d.drivers....where(lambdax:x.name=="Palle Kuling")....join(d.cars,lambdadriver,car:driver.car_brand==car.brandanddriver.car_model==car.model)....single())>>>palle.rating'good'

您还可以使用链式方法,如select(expr)first()extend(**items)

作者

lindh.jsonobject由johan egneblad<;johan@egneblad.se>;编写和维护。

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

推荐PyPI第三方库


热门话题
JavaEclipseMars没有保存首选项   java梯度同步失败:原因:启动失败:   java如何从嵌套的JSON获取数据?   java如何判断可观察对象中的任何对象满足一个条件?   java将字符串转换为保持相同值的byte[]数组   java有没有办法绕过AuditingEntityListener为测试设置数据?   从/usr/share/java中解析linux JAR依赖关系   安卓 My java函数抛出nullpointerexception?   java Gradle使用正确版本的依赖项   JBoss和Java6中带注释的WebService中的web服务ClassCastException   java如何修复codename one中的简单逻辑错误?   java如何迭代矩阵的索引?   java如何在JPanel不可见时将其保存为图像?   java HashMap如何在Kotlin中实现MutableMap接口?   javascript如何在单击后加载特定片段?   EclipseJava为纳什均衡获取所有玩家/策略组合   JavaSpring:Web服务REST在JSON上产生双反斜杠   java为什么ServletContext#getRealPath(“/”)返回相对路径?   java当我的游戏应该重新启动时,我应该如何处理重置SurfaceView和线程?