73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package json
|
|
|
|
import (
|
|
jsoniter "github.com/json-iterator/go"
|
|
"reflect"
|
|
)
|
|
|
|
// var json = jsoniter.ConfigFastest
|
|
var json = jsoniter.Config{
|
|
EscapeHTML: false,
|
|
SortMapKeys: true,
|
|
MarshalFloatWith6Digits: true, // will lose precession
|
|
ObjectFieldMustBeSimpleString: true, // do not unescape object field
|
|
}.Froze()
|
|
|
|
//goland:noinspection GoUnusedGlobalVariable
|
|
var (
|
|
Get = json.Get
|
|
Marshal = json.Marshal
|
|
Unmarshal = json.Unmarshal
|
|
UnmarshalFromString = json.UnmarshalFromString
|
|
MarshalIndent = json.MarshalIndent
|
|
NewDecoder = json.NewDecoder
|
|
NewEncoder = json.NewEncoder
|
|
)
|
|
|
|
// MarshalToString JSON编码为字符串
|
|
//
|
|
|
|
func MarshalToString(v interface{}) string {
|
|
s, err := jsoniter.MarshalToString(v)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return s
|
|
}
|
|
|
|
func Struct2MapByKeepFieldName(obj interface{}) map[string]interface{} {
|
|
t := reflect.TypeOf(obj)
|
|
v := reflect.ValueOf(obj)
|
|
|
|
var data = make(map[string]interface{})
|
|
for i := 0; i < t.NumField(); i++ {
|
|
data[t.Field(i).Name] = v.Field(i).Interface()
|
|
}
|
|
return data
|
|
}
|
|
|
|
func Struct2MapByJsonName(obj interface{}) (map[string]interface{}, error) {
|
|
marshal, err := json.Marshal(obj)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var data map[string]interface{}
|
|
err = json.Unmarshal(marshal, &data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
func MapToStruct(m map[string]interface{}, o interface{}) error {
|
|
marshal, err := json.Marshal(m)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = json.Unmarshal(marshal, o)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|