将JSON模式转换为python类

2024-04-26 23:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有用于将JSON模式转换为python类定义的python库,类似于jsonschema2pojo--https://github.com/joelittlejohn/jsonschema2pojofor Java?


Tags: httpsgithubcomjson定义模式javajoelittlejohn
3条回答

到目前为止,我能找到的最接近的东西是warlock,它公布了这个工作流:

构建您的模式

>>> schema = {
    'name': 'Country',
    'properties': {
        'name': {'type': 'string'},
        'abbreviation': {'type': 'string'},
    },
    'additionalProperties': False,
}

创建模型

>>> import warlock
>>> Country = warlock.model_factory(schema)

使用模型创建对象

>>> sweden = Country(name='Sweden', abbreviation='SE')

然而,这并不那么容易。术士生产的物品缺乏内省的好东西。如果它在初始化时支持嵌套的dict,我就不知道如何使它们工作。

为了提供一点背景知识,我正在研究的问题是如何获取Chrome's JSONSchema API,并生成一个请求生成器和响应处理程序树。术士似乎并不是太离谱,唯一的缺点是Python中的元类并不能真正转化为“代码”。

要查找的其他有用模块:

如果你最终找到了一个好的一站式解决方案,请继续你的问题-我很想找到一个。我浏览了github、pypi、googlecode、sourceforge等。。只是找不到真正性感的东西。

由于没有任何预先制定的解决方案,我可能会自己和术士拼凑一些东西。所以如果我赢了你,我会更新我的答案。:p页

python-jsonschema-objects是术士的替代品,建立在jsonschema之上

python jsonschema对象提供了一个到JSON模式的基于类的自动绑定,以便在python中使用。

用法:

Json模式示例

schema = '''{
    "title": "Example Schema",
    "type": "object",
    "properties": {
        "firstName": {
            "type": "string"
        },
        "lastName": {
            "type": "string"
        },
        "age": {
            "description": "Age in years",
            "type": "integer",
            "minimum": 0
        },
        "dogs": {
            "type": "array",
            "items": {"type": "string"},
            "maxItems": 4
        },
        "gender": {
            "type": "string",
            "enum": ["male", "female"]
        },
        "deceased": {
            "enum": ["yes", "no", 1, 0, "true", "false"]
            }
    },
    "required": ["firstName", "lastName"]
} '''

将架构对象转换为类

 import python_jsonschema_objects as pjs
 import json
 schema = json.loads(schema)   
 builder = pjs.ObjectBuilder(schema)   
 ns = builder.build_classes()   
 Person = ns.ExampleSchema   
 james = Person(firstName="James", lastName="Bond")   
 james.lastName  
  u'Bond'  james      
 example_schema lastName=Bond age=None firstName=James  

验证:

james.age = -2 python_jsonschema_objects.validators.ValidationError: -2 was less or equal to than 0

但问题是,它仍在使用draft4validation,而jsonschema已经转移到draft4validation,我在repo上提交了一个关于这个的问题。 除非您使用的是旧版本的jsonschema,否则上面的包将如图所示工作。

我创建这个小项目是为了从json模式生成代码类,即使处理python我认为在业务项目中很有用:

pip install jsonschema2popo

运行以下命令将生成一个包含json模式定义类的python模块(它使用jinja2模板)

jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json

更多信息请访问:https://github.com/frx08/jsonschema2popo

相关问题 更多 >