|
|
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)
|
|
|
}
|