package dataconvertutil import ( "encoding/json" "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/logger" "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/model/request" "gitlab.wodcloud.com/apaas/apaas-meshproxy/src/tools" ) //字段结构 转json func ConvertJson(fields []request.ServiceField) (map[string]interface{}, []interface{}) { m := map[string]interface{}{} var n []interface{} if fields == nil { return m, n } for _, field := range fields { if field.Selected == 1 && field.Type == "object" { if field.Name == "" { mm, nn := ConvertJson(field.Children) if len(nn) != 0 { n = append(n, nn) } else { n = append(n, mm) } } else { mm, nn := ConvertJson(field.Children) if len(nn) != 0 { m[field.Name] = nn } else { m[field.Name] = mm } } } else if field.Selected == 1 && field.Type == "array" { if len(field.Children) > 0 { //判断第一个元素是否为对象 如果为对象则名称必定为空 //第一个元素 要么为对象,要么为基本类型 要么为数组 if field.Children[0].Type == "object" || field.Children[0].Type == "array" { mm, nn := ConvertJson(field.Children[0].Children) if field.Name == "" { if len(nn) != 0 { n = append(n, nn) } else { n = append(n, mm) } } else { if len(nn) != 0 { m[field.Name] = nn } else { m[field.Name] = mm } } } else { if field.Name != "" { var aaa []interface{} m[field.Name] = aaa } else { if len(field.Children) > 0 { switch field.Children[0].Type { case "string", "text", "file": n = append(n, field.Children[0].Example) case "int": n = append(n, tools.ParseInt(field.Children[0].Example, 0)) case "float": n = append(n, tools.ParseFloat64(field.Children[0].Example, 1.00)) case "boolean": n = append(n, true) case "array": n = append(n, []interface{}{field.Children[0].Example}) default: var cc interface{} n = append(n, cc) } } else { var cc interface{} n = append(n, cc) } } } } else { if field.Name != "" { m[field.Name] = []interface{}{field.Example} } else { var cc interface{} n = append(n, cc) } } } else if field.Selected == 1 { m[field.Name] = field.Example } } return m, n } //字段结构 转json func ConvertJsonAll(fields []request.ServiceField) (map[string]interface{}, []interface{}) { m := map[string]interface{}{} var n []interface{} if fields == nil { return m, n } for _, field := range fields { if field.Type == "object" { if field.Name == "" { mm, nn := ConvertJsonAll(field.Children) if len(nn) != 0 { n = append(n, nn) } else { n = append(n, mm) } } else { mm, nn := ConvertJsonAll(field.Children) if len(nn) != 0 { m[field.Name] = nn } else { m[field.Name] = mm } } } else if field.Type == "array" { if len(field.Children) > 0 { //判断第一个元素是否为对象 如果为对象则名称必定为空 //第一个元素 要么为对象,要么为基本类型 要么为数组 if field.Children[0].Type == "object" || field.Children[0].Type == "array" { mm, nn := ConvertJsonAll(field.Children[0].Children) if field.Name == "" { if len(nn) != 0 { n = append(n, nn) } else { n = append(n, mm) } } else { if len(nn) != 0 { m[field.Name] = nn } else { m[field.Name] = mm } } } else { if field.Name != "" { var aaa []interface{} m[field.Name] = aaa } else { if len(field.Children) > 0 { switch field.Children[0].Type { case "string", "text", "file": n = append(n, field.Children[0].Example) case "int": n = append(n, tools.ParseInt(field.Children[0].Example, 0)) case "float": n = append(n, tools.ParseFloat64(field.Children[0].Example, 1.00)) case "boolean": n = append(n, true) case "array": n = append(n, []interface{}{field.Children[0].Example}) default: var cc interface{} n = append(n, cc) } } else { var cc interface{} n = append(n, cc) } } } } else { if field.Name != "" { m[field.Name] = []interface{}{field.Example} } else { var cc interface{} n = append(n, cc) } } } else if field.Type == "string" || field.Type == "file" { m[field.Name] = field.Example } else if field.Type == "int" { m[field.Name] = tools.ParseInt(field.Example, 0) } else if field.Type == "float" { m[field.Name] = tools.ParseFloat64(field.Example, 0.0) } else if field.Type == "bool" { m[field.Name] = true } } return m, n } func GetResponseField(jsonstr string) []request.ServiceField { var res []request.ServiceField if err := json.Unmarshal([]byte(jsonstr), &res); err != nil { logger.Logger.Fatal(err) } return res }