package main import ( "bytes" "dsBaseRpc/Utils/FileUtil" "encoding/json" "fmt" "github.com/iancoleman/strcase" "github.com/tidwall/gjson" "os" "reflect" ) //根据json对象字符串生成结构体 func createStruct(jsonStr string, structName string) string { m := make(map[string]interface{}) err := json.Unmarshal([]byte(jsonStr), &m) if err != nil { fmt.Println("转化错误:", err) } var buffer bytes.Buffer buffer.WriteString("type ") buffer.WriteString(structName) buffer.WriteString(" struct {\n") for k, v := range m { runes := []rune(k) buffer.WriteString(strcase.ToCamel(string(runes))) //驼峰命名法 buffer.WriteString(" ") buffer.WriteString((reflect.TypeOf(v)).String()) buffer.WriteString(" `json:\"") buffer.WriteString(k) buffer.WriteString("\"`") buffer.WriteString("\n") } buffer.WriteString("}") return buffer.String() } func main() { //文件名称 fileName := `e:\\t_base_organization.json` //1、读取json文件 j := FileUtil.ReadFileContent(fileName) result := gjson.Get(j, "datas") //2、生成JSON对应的struct if len(result.Array()) == 0 { fmt.Println("未找到数据,无法生成Struct~") os.Exit(200) } r1 := result.Array()[0] fmt.Println(r1.Get("data_id")) fmt.Println(r1.Get("del_flag")) re := r1.Get("data") re.ForEach(func(k1, v1 gjson.Result) bool { fmt.Println(v1) return true // keep iterating }) jsonStr := re.Str //转成map _map := make(map[string]interface{}) err := json.Unmarshal([]byte(jsonStr), &_map) if err != nil { fmt.Println("error!") } str1 := "SET NAMES utf8mb4;\n" str1 += "ET FOREIGN_KEY_CHECKS = 0;\n" str1 = "CREATE TABLE `t_base_organization` (\n" for key, value := range _map { if reflect.TypeOf(value).Name() == "float64" { str1 += "`" + key + "` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '' ,\n" } else if reflect.TypeOf(value).Name() == "string" { //可以继续判断是不是日期格式//TODO str1 += "`" + key + "` float(10,0) NULL,\n" } } str1 = str1[0 : len(str1)-2] str1 += ");\n" str1 += "SET FOREIGN_KEY_CHECKS = 1;\n" fmt.Println(str1) }