将普通JSON对象转换为Python模式
JSONSchema2PoPo2的Python项目详细描述
JSONSCHEMA2POO2
从github.com/frx08/jsonschema2popo
从JSON模式文件中提取“普通老Python对象”类的转换器。 类似于Java项目JSONSchema2PoJo。在
生成代码兼容性
Language | Feature | Version Compatibility | Reason |
---|---|---|---|
Python | Basic generation | Any Python | N/A |
Python | Using Enums | >= Python 3.4 | Uses Enum type |
Python | Using Extends | >= Python 3.0 | Uses new style Python class for inheritance |
Python | Using Types | >= Python 3.5 | Uses Python type hints in code |
JavaScript | Basic Generation | >= ES2019 (>= NodeJS 12.x) | Uses ES classes and private fields |
Go | Basic Generation | Any Go | N/A |
安装
pip install jsonschema2popo2
使用
基本:
^{pr2}$选项:
- -o、 --输出文件-生成的文件路径。在
- -t、 --使用类型-添加MyPy类型。在
- -ct,--构造函数类型检查-验证构造函数中提供的类型。在设置属性值时,而不是在构造函数中设置属性值时,只进行默认类型检查。在
- -s、 --使用slots-为每个生成的类添加一个
__slots__
以提高内存效率。在 - --不从定义生成-不要从模式的“定义”部分生成任何类。在
- --不从根对象生成-不要从模式的根生成任何类。在
- -tp,--translate properties-将属性名转换为snake_case。启用此选项后,内部类将不再以“u”作为前缀,因为它们的名称不会与属性名称冲突。在
- -l、 --语言-要在中生成的语言。“python”或“js”。在
- --namespace path—要在JSDoc的@memberOf前面加上名称空间路径(仅用于JS)
- --package name-生成代码的包名(仅用于Go)。默认为“生成”。在
将生成的对象编码为JSON:
Python
importjsong=GeneratedClass()json.dumps(g.as_dict())
JavaScript
g=newGeneratedClass();JSON.stringify(g.asMap());
Go
g:=generated.GeneratedClass{};str,err:=json.Marshal(g)
将JSON解码为生成的对象:
Python
importjsong=GeneratedClass.from_dict(json.loads(data))
JavaScript
constg=GeneratedClass.fromMap(JSON.parse(data));
Go
varggenerated.GeneratedClasserr:=json.Unmarshal(data,&g)
JSON模式格式
这个库在很大程度上与JSONSchema2PoJo以及该库如何读取JSON模式来生成Java兼容。
具体来说,对于枚举,这个库支持在JSON模式中设置javaEnumNames
数组,以便枚举给出名称
将在Python输出中生成的枚举值。在
如果要生成一个具有接受任何映射/字典的属性的对象,那么只需在模式中包含"type": "object"
并且不要在该定义中添加任何属性。在这种情况下,不会生成新的类,而是生成该属性的类型
在Python中是dict
,在JavaScript中是Object
。在
示例JSON模式文档
Schema及其引用和枚举
{"definitions":{"Enum1":{"description":"My favorite Enum!","type":"integer","enum":[1,2,3],"javaEnumNames":["First","Second","Third"]},"Obj1":{"type":"object","properties":{"prop1":{"type":"string"},"prop2":{"$ref":"#/definitions/Enum1"}}},"Obj2":{"type":"object","properties":{"obj1":{"$ref":"#/definitions/Obj1"}}}}}
生成的文档
当您在JSON模式中提供"description"
时,该描述将应用于生成的
代码。例如,在上面的示例中,枚举将有一个docstring,它表示My favorite enum!
。在
您还可以选择使用"$comment"
键在模式文档中为自己添加文档,这很简单
被此工具忽略。这样,您就可以在description
中拥有公共文档,以及任何您想保持私有的内容
可以进入$comment
。在
- 项目
标签: