是否有用于将 JSON 模式转换为 python 类定义的 python 库,类似于 jsonschema2pojo - https://github.com/joelittlejohn/jsonschema2pojo - 用于 Java?
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')
然而,这并不是那么容易。术士生产的物品缺乏内省的好东西。如果它在初始化时支持嵌套字典,我无法弄清楚如何让它们工作。
提供一点背景知识,我正在研究的问题是如何使用Chrome 的 JSONSchema API并生成请求生成器和响应处理程序树。Warlock 似乎并不太离谱,唯一的缺点是 Python 中的元类不能真正变成“代码”。
其他有用的模块寻找:
- jsonschema - (术士建立在其之上)
- valideer - 类似于 jsonschema 但名称更差。
- 一堆- 一个有趣的结构构建器,介于dotdict和结构之间
如果您最终为此找到了一个好的一站式解决方案,请跟进您的问题 - 我很想找到一个。我翻遍了 github、pypi、googlecode、sourceforge 等。只是找不到任何真正性感的东西。
由于缺乏任何预先制定的解决方案,我可能会自己与术士一起拼凑一些东西。所以如果我打败你,我会更新我的答案。:p
python-jsonschema-objects是 Warlock 的替代品,建立在 jsonschema 之上
python-jsonschema-objects 提供了一个基于类的自动绑定到 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 小于或等于 0
但问题是,它仍在使用 draft4validation,而 jsonschema 已移至 draft4validation,我在 repo 上提交了一个关于此的问题。除非您使用旧版本的 jsonschema ,否则上述软件包将如图所示工作。
我刚刚创建了这个小项目来从 json 模式生成代码类,即使处理 python 我认为在业务项目中工作时也很有用:
pip install jsonschema2popo
运行以下命令将生成一个包含 json-schema 定义的类的 python 模块(它使用 jinja2 模板)
jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json