孤独风中一匹狼
1.通过tag反射 //将结构体里的成员按照json名字来赋值
func SetStructFieldByJsonName(ptr interface{}, fields mapinterface{}) {
logger.Debug("fields:", fields)
v := reflect.ValueOf(ptr).Elem() // the struct variable
for i := 0; i < v.NumField(); i++ {
fieldInfo := v.Type().Field(i) // a reflect.StructField
tag := fieldInfo.Tag // a reflect.StructTag
name := tag.Get("json")
if name == "" {
name = strings.ToLower(fieldInfo.Name)
}
//去掉逗号后面内容 如 `json:"voucher_usage,omitempty"`
name = strings.Split(name, ",")
logger.Debug("JSONnAME:", name)
if value, ok := fields; ok {
logger.Debug("fieldInfo.Name:", fieldInfo.Name)
//给结构体赋值
//保证赋值时数据类型一致
logger.Debug("类型1:", reflect.ValueOf(value).Type(), "类型2:", v.FieldByName(fieldInfo.Name).Type())
if reflect.ValueOf(value).Type() == v.FieldByName(fieldInfo.Name).Type() {
v.FieldByName(fieldInfo.Name).Set(reflect.ValueOf(value))
}
}
}
return
}
页:
[1]