按模式序列化对象的工具

schemaconvertor的Python项目详细描述


schemaconvertor提供了一种使用schema来转换对象的方法,通过schema,可以指定该对象序列化的部分和对应的类型,其结果可以进一步序列化为json。

安装:pip install schemaconvertor

项目:githubpypi

版本:0.3

演示

假设有个简单的数据类型User

fromcollectionsimportnamedtupleUser=namedtuple("User",["name","password","age"])

可以通过指定schema来转换对象:

schema={"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer"}}}user=User(name="lyc",password="schemaconvertor",age="24")fromschemaconvertor.convertorimportconvert_by_schemaprintconvert_by_schema(user,schema)

输出: > {‘age’: 24, ‘name’: ‘lyc’}

更多示例:demo 0.3

说明

基本字段

version

version字段标识着Schema版本。

description

description字段标识着Schema说明。

encoding

encoding指定Schema的string字段的字符编码,默认是utf-8

decoderrors

decoderrors指定Schema的string字段解码失败的操作,用于str.decode的第二个参数,主要有strict ignore replace 三种可选参数,默认是strict

type

type字段指定对应待转换数据的最终类型,主要类型对应如下表:

typePython
stringunicode
objectdict
integerint
floatfloat
numberint/float
booleanbool
dictdict
arraylist
nullNoneType
rawobject

type字段直接影响转换行为,因此基本上每个Schema都需指定type,为简化表达,当一个Schema仅有type一项时,可以直接使用type的值简化表示为Schema。

typeOf

当前仅在声明typeOf字段时可以不指定typetypeOf指示如何根据数据的类型选择对应的Schema。可以使用真实的Python类型或类型元组作为key(作为isinstance的第二个参数)。

default

default字段仅用在typeOf字段内,用于指示缺省类型表示的Schema。

items

items字段仅在type为array时生效,用于描述序列中的每一项对应的Schema。

properties

items字段仅在type为dict或object时生效,指定给出的项的Schema(没有指定的项不会处理)。

patternProperties

items字段仅在type为dict或object时生效,指定符合给定的正则表达式的项的Schema(使用re.search匹配)。

附加信息

  1. Schema使用lazy compile方式,仅在转换使用时自动编译,初始化代价极小。
  2. 子Schema中如无显式声明,version description encoding decoderrors 自动继承父Schema对应的值。
  3. typeOf能够识别继承关系,但针对使用数据真实类型的情况有优化。
  4. typeOf指定多种类型时不要使用list等非hashable类型。
  5. 对于object 的情况是使用ObjAsDictAdapter将数据包装成类dict对象进行转换的。

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

推荐PyPI第三方库


热门话题
Java中的第10个解决方案   Java中泛型的super和extends组合   Java Android OpenGL ES 2.0片段着色器texture2D不工作   在JList elementJava上按下时打开弹出窗口   字典Java数据结构允许对象上的布尔标志和排序?   java我该如何停止为AWS关系数据库服务收费?   java如何检查Google定位准确度是否提高?   java使用Mockito将方法存根在与被测类相同的类中(CUT)   java IntelliJIdea disable inspection:参数的实际值始终为   java CXF+多态POST数据   java命名空间“ads”未绑定   Sun(1999)的“Java编程语言的代码约定”的编码风格过时了吗?   JAVA中的隐式接口、类转换   javafx如何配置Java登录应用程序代码   java如何在滚动窗格中设置选项卡以及如何显示选项卡标题   java中等式和条件运算符的优先级   java Spring WS无法返回JAXB响应   错误响应上的java jaxws处理程序行为   java Hibernate HQL映射查询