// Package wrapper ... // // Description : wrapper ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2023-08-10 15:01 package wrapper import ( "encoding/json" "errors" "git.zhangdeman.cn/zhangdeman/easymap" "git.zhangdeman.cn/zhangdeman/serialize" "github.com/tidwall/gjson" "reflect" ) // EasyMap ... // // Author : go_developer@163.com<白茶清欢> // // Date : 15:02 2023/8/10 func EasyMap(mapData any) easymap.EasyMap { m, _ := EasyMapWithError(mapData) return m } // EasyMapWithError 转换map,并带上转换的异常 // // Author : go_developer@163.com<白茶清欢> // // Date : 15:06 2023/8/10 func EasyMapWithError(mapData any) (easymap.EasyMap, error) { if nil == mapData { return easymap.NewNormal(), nil } m := easymap.NewNormal() reflectType := reflect.TypeOf(mapData) if reflectType.Kind() != reflect.Map { mapFormatData := make(map[string]any) if err := serialize.JSON.UnmarshalWithNumber(serialize.JSON.MarshalForByteIgnoreError(mapData), &mapFormatData); nil != err { return m, errors.New("input data type is " + reflectType.String() + ", can not convert to map") } mapData = mapFormatData } reflectValue := reflect.ValueOf(mapData).MapRange() for reflectValue.Next() { // 循环提取相关值 m.Set(reflectValue.Key().Interface(), reflectValue.Value().Interface()) } return m, nil } // EasyMapFromStruct 从struct转map // // Author : go_developer@163.com<白茶清欢> // // Date : 16:11 2023/8/10 func EasyMapFromStruct(data any) easymap.EasyMap { byteData, _ := json.Marshal(data) return EasyMapFromByte(byteData) } // EasyMapFromString 从string转为Map // // Author : go_developer@163.com<白茶清欢> // // Date : 16:12 2023/8/10 func EasyMapFromString(data string) easymap.EasyMap { return EasyMapFromByte([]byte(data)) } // EasyMapFromByte 从字节数组转为Map // // Author : go_developer@163.com<白茶清欢> // // Date : 16:12 2023/8/10 func EasyMapFromByte(data []byte) easymap.EasyMap { res := easymap.NewNormal() jsonRes := gjson.Parse(string(data)) jsonRes.ForEach(func(key, value gjson.Result) bool { res.Set(key.Value(), value.Value()) return true }) return res }