json_parser_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package responses
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/stretchr/testify/assert"
  6. "testing"
  7. )
  8. func TestFuzzyFieldUnmarshal(t *testing.T) {
  9. from, err := getJsonBytes()
  10. if err != nil {
  11. panic(err)
  12. }
  13. fmt.Println("From:")
  14. fmt.Println(string(from))
  15. to := &To{}
  16. // support auto json type trans
  17. initJsonParserOnce()
  18. err = jsonParser.Unmarshal(from, to)
  19. if err != nil {
  20. panic(err)
  21. }
  22. fmt.Println("To:")
  23. bytesTo, _ := json.MarshalIndent(to, "", " ")
  24. fmt.Println(string(bytesTo))
  25. assert.Equal(t, "demo string", to.StrToStr)
  26. assert.Equal(t, 123, to.StrToInt)
  27. assert.Equal(t, int64(2147483648), to.StrToInt64)
  28. assert.Equal(t, 1.23, to.StrToFloat)
  29. assert.True(t, to.UpperFullStrToBool)
  30. assert.True(t, to.UpperCamelStrToBool)
  31. assert.True(t, to.LowerStrToBool)
  32. assert.Equal(t, "123", to.IntToStr)
  33. assert.Equal(t, 123, to.IntToInt)
  34. assert.Equal(t, "2147483648", to.Int64ToStr)
  35. assert.Equal(t, int64(2147483648), to.Int64ToInt64)
  36. assert.Equal(t, "true", to.BoolToStr)
  37. assert.Equal(t, true, to.BoolToBool)
  38. assert.Equal(t, 0, to.EmptyStrToInt)
  39. assert.Equal(t, int64(0), to.EmptyStrToInt64)
  40. assert.Equal(t, float64(0), to.EmptyStrToFloat)
  41. assert.Equal(t, false, to.EmptyStrToBool)
  42. assert.Equal(t, "", to.EmptyStrToStr)
  43. }
  44. func getJsonBytes() ([]byte, error) {
  45. from := &From{
  46. StrToStr: "demo string",
  47. StrToInt: "123",
  48. StrToInt64: "2147483648",
  49. StrToFloat: "1.23",
  50. UpperFullStrToBool: "TRUE",
  51. UpperCamelStrToBool: "True",
  52. LowerStrToBool: "true",
  53. IntToStr: 123,
  54. IntToInt: 123,
  55. Int64ToStr: int64(2147483648),
  56. Int64ToInt64: int64(2147483648),
  57. FloatToStr: float64(1.23),
  58. FloatToFloat: float64(1.23),
  59. BoolToStr: true,
  60. BoolToBool: true,
  61. EmptyStrToInt: "",
  62. EmptyStrToInt64: "",
  63. EmptyStrToFloat: "",
  64. EmptyStrToBool: "",
  65. EmptyStrToStr: "",
  66. }
  67. return json.MarshalIndent(from, "", " ")
  68. }
  69. type From struct {
  70. StrToStr string
  71. StrToInt string
  72. StrToInt64 string
  73. StrToFloat string
  74. UpperFullStrToBool string
  75. UpperCamelStrToBool string
  76. LowerStrToBool string
  77. IntToStr int
  78. IntToInt int
  79. Int64ToStr int64
  80. Int64ToInt64 int64
  81. FloatToStr float64
  82. FloatToFloat float64
  83. BoolToStr bool
  84. BoolToBool bool
  85. EmptyStrToInt string
  86. EmptyStrToInt64 string
  87. EmptyStrToFloat string
  88. EmptyStrToBool string
  89. EmptyStrToStr string
  90. }
  91. type To struct {
  92. StrToStr string
  93. StrToInt int
  94. StrToInt64 int64
  95. StrToFloat float64
  96. UpperFullStrToBool bool
  97. UpperCamelStrToBool bool
  98. LowerStrToBool bool
  99. IntToStr string
  100. IntToInt int
  101. Int64ToStr string
  102. Int64ToInt64 int64
  103. FloatToStr string
  104. FloatToFloat float64
  105. BoolToStr string
  106. BoolToBool bool
  107. EmptyStrToInt int
  108. EmptyStrToInt64 int64
  109. EmptyStrToFloat float64
  110. EmptyStrToBool bool
  111. EmptyStrToStr string
  112. NilToInt int
  113. NilToInt64 int64
  114. NilToFloat float64
  115. NilToBool bool
  116. NilToStr string
  117. }