如何遍历JSON Schema对象并提取字段生成对应Java类代码
基于JSON Schema批量生成Java类的实现方案
核心思路
你关心的遍历提取字段逻辑非常好实现:把JSON文件解析为字典对象后,直接取properties节点,遍历该节点的所有键值对就能拿到属性名、对应的type值,再映射为Java类型后按模板拼接代码即可。
类型映射规则
先约定JSON Schema类型和Java类型的对应关系,你可以按需调整:
- string → String
- number → Integer(如果有浮点需求可改为Double)
- boolean → Boolean
- integer → Long
可直接运行的Python脚本
Python自带JSON解析库,不需要额外安装复杂依赖,脚本如下:
import os import json # 类型映射表,可按需修改 TYPE_MAPPING = { "string": "String", "number": "Integer", "integer": "Long", "boolean": "Boolean" } # 配置路径 SCHEMA_FOLDER = "./schemas" OUTPUT_FOLDER = "./output" if not os.path.exists(OUTPUT_FOLDER): os.makedirs(OUTPUT_FOLDER) # 遍历所有JSON文件 for filename in os.listdir(SCHEMA_FOLDER): if not filename.endswith(".json"): continue # 读取并解析JSON file_path = os.path.join(SCHEMA_FOLDER, filename) with open(file_path, "r", encoding="utf-8") as f: schema_data = json.load(f) properties = schema_data.get("properties", {}) # 类名默认取JSON文件名去掉后缀,你也可以自定义为固定值比如Whatever class_name = filename.replace(".json", "").capitalize() # 拼接属性代码 field_lines = [] param_list = [] for prop_name, prop_info in properties.items(): json_type = prop_info.get("type") java_type = TYPE_MAPPING.get(json_type, "Object") # 生成属性定义 field_lines.append(f" @JsonProperty\n public {java_type} {prop_name};\n") # 生成构造函数参数 param_list.append(f"{java_type} {prop_name}") # 拼接完整类代码 class_code = f"public static class {class_name} {{\n" class_code += "\n".join(field_lines) + "\n" class_code += f" public {class_name}() {{}}\n\n" class_code += f" public {class_name}({', '.join(param_list)}){{\n" # 如果你要保留你示例中的this(...)写法,把下面的循环替换为` this({', '.join([p.split(' ')[1] for p in param_list])});`即可 for param in param_list: prop_name = param.split(" ")[1] class_code += f" this.{prop_name} = {prop_name};\n" class_code += " }\n}" # 输出到Java文件 output_file = os.path.join(OUTPUT_FOLDER, f"{class_name}.java") with open(output_file, "w", encoding="utf-8") as f: f.write(class_code)
使用方法
- 把所有待处理的JSON Schema文件放在同一个文件夹下,命名为
schemas - 把上述脚本保存为
generate_java.py,和schemas文件夹放在同一目录 - 命令行运行
python generate_java.py - 生成的Java类会自动保存在同级的
output文件夹下
注意事项
- 请先确保你的JSON Schema语法正确,你给出的示例JSON中prop2结尾少了逗号,运行前需修正
- 如果需要调整Java类的模板(比如加getter/setter、修改注解等),直接修改脚本中的代码拼接逻辑即可
内容的提问来源于stack exchange,提问作者st123
相关产品推荐
相关产品推荐

