import com.alibaba.fastjson.JSONObject;
import java.util.Set;
public class Json转表结构 {
public static String s = "" +
"{\n" +
" \"age\": \"6\",\n" +
" \"name\": \"张三\",\n" +
" \"speed\": 553.8017520000001,\n" +
" \"time\": 123233123133,\n" +
" \"lng\": 103.980244,\n" +
" \"lat\": 30.694589\n" +
"}";
public static String r = "" +
"{\n" +
" \"age\": \"年龄\",\n" +
" \"name\": \"名称\",\n" +
" \"speed\": \"速度\",\n" +
" \"time\": \"时间\",\n" +
" \"lng\": \"经度\",\n" +
" \"lat\": \"维度\"\n" +
"}";
public static void main(String[] args) {
// 参数说明: 数据json 数据字段说明json 表名 表描述
run(s, r, "test1", "测试表1");
}
// -----------------------------------------分割线--------------------------------------------------------
public static void run(String str, String filedRemakes, String table, String tableRemake) {
j = JSONObject.parseObject(str);
JSONObject frs = new JSONObject();
try {
frs = JSONObject.parseObject(filedRemakes);
} catch (Exception e) {
}
Set<String> keys = j.keySet();
StringBuffer ddl = new StringBuffer();
ddl.append("CREATE TABLE `" + table + "` (\n" + " `pkid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',\n" + " `sys_create_time` datetime DEFAULT NULL COMMENT '创建时间',\n" + " `sys_modify_time` datetime DEFAULT NULL COMMENT '修改时间',\n");
// 遍历键并获取其类型
for (String key : keys) {
String xhx = tuoFengToxiaHuaXian(key);
String fr = frs.getString(key);
if (fr == null) {
fr = "";
}
ddl.append(" `" + xhx + "` " + getMysqlType(getJavaObject(key)) + " DEFAULT NULL COMMENT '" + fr + "',\n");
}
ddl.append(" PRIMARY KEY (`pkid`)\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='" + tableRemake + "';");
System.out.println(ddl);
}
private static JSONObject j;
public static String getJavaObject(String key) {
Class<?> keyType = null;
try {
keyType = j.get(key).getClass();
} catch (Exception e) {
keyType = String.class;
}
switch (keyType.toString()) {
case "class java.lang.String":
return "String";
case "class java.lang.Integer":
case "class java.lang.Long":
return "Long";
case "class java.lang.Float":
case "class java.lang.Double":
case "class java.math.BigDecimal":
return "Double";
default:
break;
}
return "String";
}
/**
* 驼峰转下划线
*
* @param str
* @return
*/
public static String tuoFengToxiaHuaXian(String str) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i))) {
sb.append("_").append(Character.toLowerCase(str.charAt(i)));
} else {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
public static String getMysqlType(String javaType) {
switch (javaType) {
case "String":
return "varchar(100)";
case "Long":
return "bigint";
case "Double":
return "double";
case "double":
return "Double";
default:
throw new RuntimeException("未找到与mysql映射的类型");
}
}
}
处理json的maven坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>