是否有一个Python库可以将JSON模式转换为Python类定义,类似于Java的jsonschema 2 pojo--https://github.com/joelittlejohn/jsonschema2pojo--?
aurhwmvo1#
我刚刚创建了这个小项目,以从json schema生成代码类,即使处理Python,我认为在业务项目中工作时也很有用:
pip install jsonschema2popo
运行以下命令将生成一个包含json-schema定义的类的python模块(它使用jinja 2模板)
jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json
更多信息:https://github.com/frx08/jsonschema2popo
c7rzv4ha2#
datamodel-code-generator是一个cli代码生成器,可以从包括JSON模式在内的各种源构建pydantic模型和dataclasses.dataclass。在撰写本文时,根据GitHub的数据,它比其他答案中的库拥有更多的用户从json schema生成python数据类的示例用法:
datamodel-codegen --input ./<your-data-here>.json --input-file-type jsonschema --output <your-data-here>.py --output-model-type dataclasses.dataclass
xggvc2p63#
到目前为止,我能找到的最接近的东西是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')
然而,这并不那么容易。术士制造的物品缺乏内省的好东西。如果它在初始化时支持嵌套的dicts,我无法弄清楚如何使它们工作。为了给予一点背景知识,我正在研究的问题是如何使用Chrome's JSONSchema API并生成请求生成器和响应处理程序的树。Warlock看起来并不太离谱,唯一的缺点是Python中的元类不能真正转化为“代码”。其他要查找的有用模块:
如果你最终找到了一个很好的一站式解决方案,请跟进你的问题-我很乐意找到一个。我浏览了github,pypi,googlecode,sourceforge等等。却找不到任何性感的东西。由于缺乏任何预先制定的解决方案,我可能会拼凑一些术士自己。所以如果我比你先回答,我会更新我的答案。:p
1szpjjfi4#
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但问题是,它仍然使用draft 4validation,而jsonschema已经移到draft 4validation,我在repo上提交了一个关于这个问题的issue。除非你使用的是旧版本的jsonschema,否则上面的包将如图所示工作。
4条答案
按热度按时间aurhwmvo1#
我刚刚创建了这个小项目,以从json schema生成代码类,即使处理Python,我认为在业务项目中工作时也很有用:
运行以下命令将生成一个包含json-schema定义的类的python模块(它使用jinja 2模板)
更多信息:https://github.com/frx08/jsonschema2popo
c7rzv4ha2#
datamodel-code-generator是一个cli代码生成器,可以从包括JSON模式在内的各种源构建pydantic模型和dataclasses.dataclass。
在撰写本文时,根据GitHub的数据,它比其他答案中的库拥有更多的用户
从json schema生成python数据类的示例用法:
xggvc2p63#
到目前为止,我能找到的最接近的东西是warlock,它宣传了这个工作流程:
构建您的架构
创建模型
使用您的模型创建对象
然而,这并不那么容易。术士制造的物品缺乏内省的好东西。如果它在初始化时支持嵌套的dicts,我无法弄清楚如何使它们工作。
为了给予一点背景知识,我正在研究的问题是如何使用Chrome's JSONSchema API并生成请求生成器和响应处理程序的树。Warlock看起来并不太离谱,唯一的缺点是Python中的元类不能真正转化为“代码”。
其他要查找的有用模块:
如果你最终找到了一个很好的一站式解决方案,请跟进你的问题-我很乐意找到一个。我浏览了github,pypi,googlecode,sourceforge等等。却找不到任何性感的东西。
由于缺乏任何预先制定的解决方案,我可能会拼凑一些术士自己。所以如果我比你先回答,我会更新我的答案。:p
1szpjjfi4#
python-jsonschema-objects是warlock的替代品,构建在jsonschema之上
python-jsonschema-objects为JSON模式提供了一个自动的基于类的绑定,以便在python中使用。
用法:
Json架构示例
将架构对象转换为类
验证:
james.age = -2 python_jsonschema_objects.validators.ValidationError:-2小于或等于0
但问题是,它仍然使用draft 4validation,而jsonschema已经移到draft 4validation,我在repo上提交了一个关于这个问题的issue。除非你使用的是旧版本的jsonschema,否则上面的包将如图所示工作。