|
|
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)
|
|
|
}
|