json_parser_test.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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 TestFuzzyTypeUnmarshal(t *testing.T){
  45. // arrayJson := "[{\"instance_type\":\"ecs.n4.large\",\"vpc_id\":\"\",\"vswitch_id\":\"\",\"vswitch_cidr\":\"\",\"image_id\":\"registry-internal.cn-beijing.aliyuncs.com/acs/agent\",\"data_disk_size\":0,\"data_disk_category\":\"cloud_ssd\",\"security_group_id\":\"sg-2ze57kc2cf36f9mrsrjx\",\"tags\":\"\",\"zone_id\":\"cn-beijing-a\",\"-\":\"PayByTraffic\",\"name\":\"Hello\",\"cluster_id\":\"ca737c2c04143464eaf439e245ceb1bf4\",\"size\":3,\"region_id\":\"cn-beijing\",\"network_mode\":\"classic\",\"subnet_cidr\":\"172.18.1.1/24\",\"state\":\"running\",\"master_url\":\"https://master4g7.cs-cn-beijing.aliyun.com:20019\",\"agent_version\":\"0.9-cdb96d4\",\"external_loadbalancer_id\":\"lb-2zegrgbsmjvxx1r1v26pn\",\"internal_master_url\":\"https://master4g7.cs-cn-beijing.aliyun-inc.com:20019\",\"port\":20019,\"node_status\":\"{\\\"health\\\":0,\\\"unhealth\\\":3}\",\"cluster_healthy\":\"unhealth\",\"docker_version\":\"17.06.1-ce\",\"cluster_type\":\"aliyun\",\"swarm_mode\":true,\"init_version\":\"\",\"current_version\":\"\",\"meta_data\":\"\",\"upgrade_components\":null,\"capabilities\":{\"acslogging\":true,\"acsrouting\":true,\"blue-green_confirm\":true,\"blue-green_deployment\":true,\"cluster_event\":true,\"compose_v2\":true,\"config_map\":true,\"cron\":true,\"default_update_method\":true,\"drain\":true,\"logging_sls\":true,\"monitoring\":true,\"node_scaling\":true,\"porject_event_deletion\":true,\"porject_trigger\":true,\"rebalance\":true,\"reset_node\":true,\"routing_custom_root_domain\":true,\"routing_slb\":true,\"scalingtrigger\":true,\"slb-blue-green_deployment\":true,\"update_force_reschedule\":true,\"volume_ossfs\":true,\"volume_yunpan\":true},\"need_update_agent\":false,\"created\":\"2017-09-12T07:26:58Z\",\"updated\":\"2017-12-26T11:36:41Z\",\"outputs\":null,\"parameters\":null}]"
  46. // commonResponse := NewCommonResponse()
  47. // // support auto json type trans
  48. // initJsonParserOnce()
  49. // err := jsonParser.Unmarshal([]byte(arrayJson), commonResponse)
  50. // if err != nil {
  51. // panic(err)
  52. // }
  53. //}
  54. func getJsonBytes() ([]byte, error) {
  55. from := &From{
  56. StrToStr: "demo string",
  57. StrToInt: "123",
  58. StrToInt64: "2147483648",
  59. StrToFloat: "1.23",
  60. UpperFullStrToBool: "TRUE",
  61. UpperCamelStrToBool: "True",
  62. LowerStrToBool: "true",
  63. IntToStr: 123,
  64. IntToInt: 123,
  65. Int64ToStr: int64(2147483648),
  66. Int64ToInt64: int64(2147483648),
  67. FloatToStr: float64(1.23),
  68. FloatToFloat: float64(1.23),
  69. BoolToStr: true,
  70. BoolToBool: true,
  71. EmptyStrToInt: "",
  72. EmptyStrToInt64: "",
  73. EmptyStrToFloat: "",
  74. EmptyStrToBool: "",
  75. EmptyStrToStr: "",
  76. }
  77. return json.MarshalIndent(from, "", " ")
  78. }
  79. type From struct {
  80. StrToStr string
  81. StrToInt string
  82. StrToInt64 string
  83. StrToFloat string
  84. UpperFullStrToBool string
  85. UpperCamelStrToBool string
  86. LowerStrToBool string
  87. IntToStr int
  88. IntToInt int
  89. Int64ToStr int64
  90. Int64ToInt64 int64
  91. FloatToStr float64
  92. FloatToFloat float64
  93. BoolToStr bool
  94. BoolToBool bool
  95. EmptyStrToInt string
  96. EmptyStrToInt64 string
  97. EmptyStrToFloat string
  98. EmptyStrToBool string
  99. EmptyStrToStr string
  100. }
  101. type To struct {
  102. StrToStr string
  103. StrToInt int
  104. StrToInt64 int64
  105. StrToFloat float64
  106. UpperFullStrToBool bool
  107. UpperCamelStrToBool bool
  108. LowerStrToBool bool
  109. IntToStr string
  110. IntToInt int
  111. Int64ToStr string
  112. Int64ToInt64 int64
  113. FloatToStr string
  114. FloatToFloat float64
  115. BoolToStr string
  116. BoolToBool bool
  117. EmptyStrToInt int
  118. EmptyStrToInt64 int64
  119. EmptyStrToFloat float64
  120. EmptyStrToBool bool
  121. EmptyStrToStr string
  122. NilToInt int
  123. NilToInt64 int64
  124. NilToFloat float64
  125. NilToBool bool
  126. NilToStr string
  127. }