import json
type_list = []
def json_to_java_class(json_obj, class_name):
java_class = f"@Data\npublic class {class_name} " + "{\n"
fields = []
nested_classes = []
for key, value in json_obj.items():
field_name = to_camel_case(key)
if isinstance(value, dict):
nested_class_name = snake_to_camel(key)
nested_classes.append(json_to_java_class(value, nested_class_name))
fields.append(f" @JsonProperty(\"{key}\")\n private {nested_class_name} {field_name};\n")
elif isinstance(value, list):
if value and isinstance(value[0], dict):
nested_class_name = snake_to_camel(key) # 假设key是复数形式
nested_classes.append(json_to_java_class(value[0], nested_class_name))
fields.append(f" @JsonProperty(\"{key}\")\n private List<{nested_class_name}> {field_name};\n")
else:
fields.append(f" @JsonProperty(\"{key}\")\n private List<{get_java_type(value[0])}> {field_name};\n")
else:
fields.append(f" @JsonProperty(\"{key}\")\n private {get_java_type(value)} {field_name};\n")
java_class += "".join(fields)
java_class += "\n"
for nested_class in nested_classes:
nested_class = nested_class.replace("public class", "public static class")
java_class += nested_class
java_class += "}\n"
return java_class
def get_java_type(value):
if isinstance(value, int):
if value > 2147483647 or value < -2147483648:
type_list.append("Long")
return "Long"
type_list.append("Integer")
return "Integer"
elif isinstance(value, float):
type_list.append("Double")
return "Double"
elif isinstance(value, bool):
type_list.append("Boolean")
return "Boolean"
elif isinstance(value, list):
type_list.append("List")
return "List<" + get_java_type(value[0]) + ">"
else:
type_list.append("String")
return "String"
def to_camel_case(snake_str):
components = snake_str.split('_')
return components[0] + ''.join(x.title() for x in components[1:])
def snake_to_camel(snake_str):
components = snake_str.split('_')
return ''.join(x.title() for x in components)
# 需要转化的json
json_str = '''
{
"result": [
{
"name": "jack",
"age": 18,
"class_name": [
"math",
"music",
"english"
]
},
{
"name": "rose",
"age": 18,
"class_name": [
"math",
"music",
"english"
]
}
]
}
'''
json_obj = json.loads(json_str)
java_class = json_to_java_class(json_obj, "TestClass")
with open("TestClass.java", "w") as file:
file.write("import com.fasterxml.jackson.annotation.JsonProperty;\n")
file.write("import lombok.Data;\n\n")
if 'List' in type_list:
file.write("import java.util.List;\n\n")
file.write(java_class)
print("Java class has been generated and saved to TestClass.java")
注意事项:
1.需要标准格式的json
2.不能放空列表,如"tags":[]
3.去除转义符
4.生成的java实体类会保存到当前文件夹