JSON可序列化对象
lindh-jsonobject的Python项目详细描述
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)。