JSON转JAVA实体类的Python程序

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实体类会保存到当前文件夹

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值