official_adapter.go 1019 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // +build json // 仅当编译时带 -tags=json 参数时才生效
  2. package jsonutil
  3. import (
  4. "encoding/json"
  5. "strings"
  6. )
  7. var (
  8. Marshal = func(v interface{}) ([]byte, error) {
  9. if nil == v {
  10. return nil, nil
  11. } else if m, ok := v.(json.Marshaler); ok {
  12. return m.MarshalJSON()
  13. } else {
  14. return json.Marshal(v)
  15. }
  16. }
  17. Unmarshal = json.Unmarshal
  18. MarshalToString = func(v interface{}) (string, error) {
  19. if nil == v {
  20. return "", nil
  21. } else if m, ok := v.(json.Marshaler); ok {
  22. data, err := m.MarshalJSON()
  23. if nil != err {
  24. return "", err
  25. }
  26. return string(data), err
  27. } else {
  28. data, err := json.Marshal(v)
  29. if nil != err {
  30. return "", err
  31. }
  32. return string(data), nil
  33. }
  34. }
  35. UnmarshalFromString = func(str string, v interface{}) error {
  36. str = strings.TrimSpace(str)
  37. if str == "" {
  38. return nil
  39. }
  40. data := []byte(str)
  41. return json.Unmarshal(data, v)
  42. }
  43. MarshalIndent = json.MarshalIndent
  44. NewDecoder = json.NewDecoder
  45. NewEncoder = json.NewEncoder
  46. )