package main import ( "bytes" "dsBaseRpc/Utils/CommonUtil" "dsBaseRpc/Utils/FileUtil" "encoding/json" "fmt" "github.com/iancoleman/strcase" "github.com/tidwall/gjson" "os" "path/filepath" "reflect" "strings" ) //根据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:\\TBaseOrganization.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") jsonStr := re.Str c := strings.Replace(filepath.Base(fileName), ".json", "", -1) content := "package Struct\n" + createStruct(jsonStr, c) parentPath, _ := os.Getwd() parentPath = strings.Replace(parentPath, "\\", "/", -1) //保存文件 p1 := parentPath + "/Test/TestFenXiJson/Struct/" + c + ".go" FileUtil.WriteContent(p1, content) //格式化文件 CommonUtil.Exec("gofmt", "-l", "-w", p1) }