123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // 设置jsoniter为默认库 // +build jsoniter // 仅当编译时带 -tags=jsoniter 参数时才生效
- package jsonutil
- import (
- "encoding/json"
- "github.com/json-iterator/go"
- "reflect"
- )
- var (
- adapter = jsoniter.ConfigCompatibleWithStandardLibrary
- Marshal = func(v interface{}) ([]byte, error) {
- if nil == v {
- return nil, nil
- }
- iKind := reflect.TypeOf(v).Kind()
- ele := reflect.ValueOf(v)
- if iKind == reflect.Ptr {
- ele = ele.Elem()
- }
- v = ele.Interface()
- if nil == v {
- return nil, nil
- }
- if m, ok := v.(json.Marshaler); ok {
- if nil == m {
- return nil, nil
- }
- return m.MarshalJSON()
- }
- return adapter.Marshal(v)
- }
- Unmarshal = adapter.Unmarshal
- MarshalToString = func(v interface{}) (string, error) {
- if nil == v {
- return "", nil
- }
- iKind := reflect.TypeOf(v).Kind()
- ele := reflect.ValueOf(v)
- if iKind == reflect.Ptr {
- ele = ele.Elem()
- }
- v = ele.Interface()
- if nil == v {
- return "", nil
- }
- if m, ok := v.(json.Marshaler); ok {
- if nil == m {
- return "", nil
- }
- data, err := m.MarshalJSON()
- if nil != err {
- return "", err
- }
- return string(data), err
- }
- return adapter.MarshalToString(v)
- }
- UnmarshalFromString = adapter.UnmarshalFromString
- MarshalIndent = adapter.MarshalIndent
- NewDecoder = adapter.NewDecoder
- NewEncoder = adapter.NewEncoder
- )
|