upgrade utils.ToMap
This commit is contained in:
parent
dc51c7659b
commit
727e67fa5b
@ -18,7 +18,7 @@ type Commands struct {
|
|||||||
|
|
||||||
// CommandsWithGroup -
|
// CommandsWithGroup -
|
||||||
type CommandsWithGroup struct {
|
type CommandsWithGroup struct {
|
||||||
Commands
|
Commands `cc:"-,<<"`
|
||||||
GroupName string `db:"group_name" cc:"group_name"`
|
GroupName string `db:"group_name" cc:"group_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,9 +67,48 @@ func ToMap(ss interface{}) map[string]interface{} {
|
|||||||
tag := string(t.Type().Field(i).Tag)
|
tag := string(t.Type().Field(i).Tag)
|
||||||
str := mtag.FindStringSubmatch(tag)
|
str := mtag.FindStringSubmatch(tag)
|
||||||
name := t.Type().Field(i).Name
|
name := t.Type().Field(i).Name
|
||||||
|
leveling := false
|
||||||
if len(str) > 1 {
|
if len(str) > 1 {
|
||||||
name = str[1]
|
strArr := strings.Split(str[1], ",")
|
||||||
|
name = strArr[0]
|
||||||
|
if len(strArr) > 1 && strArr[1] == "<<" {
|
||||||
|
leveling = true
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if f.Kind() == reflect.Slice {
|
||||||
|
if name == "-" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if f.Len() > 0 && f.Index(0).Kind() != reflect.Struct {
|
||||||
|
smap[name] = f.Interface()
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp := make([]map[string]interface{}, f.Len())
|
||||||
|
for i := 0; i < f.Len(); i++ {
|
||||||
|
tmp[i] = ToMap(f.Index(i).Interface())
|
||||||
|
}
|
||||||
|
smap[name] = tmp
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if f.Kind() == reflect.Struct {
|
||||||
|
if name == "-" && leveling == false {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp := ToMap(f.Interface())
|
||||||
|
if leveling == true {
|
||||||
|
for k, v := range tmp {
|
||||||
|
smap[k] = v
|
||||||
|
}
|
||||||
|
} else if name != "-" && leveling == false {
|
||||||
|
smap[name] = tmp
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if name != "-" {
|
if name != "-" {
|
||||||
smap[name] = f.Interface()
|
smap[name] = f.Interface()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user