将普通JSON对象转换为Python模式

JSONSchema2PoPo2的Python项目详细描述


JSONSCHEMA2POO2

github.com/frx08/jsonschema2popo

从JSON模式文件中提取“普通老Python对象”类的转换器。 类似于Java项目JSONSchema2PoJo。在

PyPI versionPython package

生成代码兼容性

LanguageFeatureVersion CompatibilityReason
PythonBasic generationAny PythonN/A
PythonUsing Enums>= Python 3.4Uses Enum type
PythonUsing Extends>= Python 3.0Uses new style Python class for inheritance
PythonUsing Types>= Python 3.5Uses Python type hints in code
JavaScriptBasic Generation>= ES2019 (>= NodeJS 12.x)Uses ES classes and private fields
GoBasic GenerationAny GoN/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。在

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

推荐PyPI第三方库


热门话题
java如何读取、验证和移动数据。csv文件?   用于在线蛇游戏的java解析scaing   java JavaFX:在窗口上移动元素(阶段)调整大小   mysql如何使用java中的IOUtils包在jsp中显示多个图像?   Java dateFormat不可解析日期异常   spring mvc java。执行单元测试时lang.AssertionError   java在一个webapp中运行多个调度器有什么问题吗?   JAVAlang.ArrayIndexOutofBounds异常:1未来。get()多线程   java使用MDC或spring boot中的任何过滤器屏蔽日志消息中的密码,而不使用logback。xml文件   与应用服务器的java AJP和SSL通信   java Hibernate更新列表中的特定对象   Java小程序:使用keylistener移动多边形   java访问是一个独立于MainActivity的进程   来自服务器的java重复密钥或完整性约束冲突消息:“列“volume”不能为null”   java是否有任何方法可以确保在Flink on job cancel with savepoint上通知所有检查点侦听器检查点完成?