json_parser_test.go 4.8 KB

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