package jsonm import ( "bytes" "crypto/md5" "encoding/hex" "encoding/json" "reflect" ) type JsonM []byte // ToString 变成字符串 func (m JsonM) ToString() string { if m == nil { return "" } return bytes.NewBuffer(m).String() } // ToBytes 变成字节 func (m JsonM) ToBytes() []byte { if m == nil { return nil } return bytes.NewBuffer(m).Bytes() } // ToMd5 变成md5数据 func (m JsonM) ToMd5() (str string, err error) { hash := md5.New() _, err = hash.Write(m) if err != nil { return } str = hex.EncodeToString(hash.Sum(nil)) return } // Marshal 直接解析为jsonM func Marshal(v any) (JsonM, error) { return marshal(v) } // MarshalCkZero 验证传值类型是否为空值 func MarshalCkZero(v any) (JsonM, error) { if v == nil || reflect.ValueOf(v).IsZero() { return nil, nil } return marshal(v) } // MarshalToString 转成字符串 func MarshalToString(v any) (string, error) { b, err := MarshalCkZero(v) if err != nil { return "", err } return b.ToString(), nil } // StrUnmarshal 字符串转结构体 func StrUnmarshal(str string, v any) error { if str == "" { return nil } buf := bytes.NewBufferString(str) return unmarshal(buf.Bytes(), v) } // Unmarshal 把jsonM数据转成结构体 func Unmarshal(data JsonM, v any) error { if data == nil { return nil } return unmarshal(data, v) } // ToSliceString 如果是nil数据,返回"[]" func ToSliceString(v any) (string, error) { b, err := MarshalCkZero(v) if err != nil { return "", err } if b == nil { return "[]", nil } return b.ToString(), nil } // ToObjString 如果是nil数据,返回"{}" func ToObjString(v any) (string, error) { b, err := MarshalCkZero(v) if err != nil { return "", err } if b == nil { return "{}", nil } return b.ToString(), nil } func marshal(v any) (JsonM, error) { return json.Marshal(v) } func unmarshal(data JsonM, v any) error { return json.Unmarshal(data, v) }