jsoniter_map_test.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package misc_tests
  2. import (
  3. "encoding/json"
  4. "math/big"
  5. "testing"
  6. "github.com/json-iterator/go"
  7. "github.com/stretchr/testify/require"
  8. "strings"
  9. )
  10. func Test_decode_TextMarshaler_key_map(t *testing.T) {
  11. should := require.New(t)
  12. var val map[*big.Float]string
  13. should.Nil(jsoniter.UnmarshalFromString(`{"1":"2"}`, &val))
  14. str, err := jsoniter.MarshalToString(val)
  15. should.Nil(err)
  16. should.Equal(`{"1":"2"}`, str)
  17. }
  18. func Test_read_map_with_reader(t *testing.T) {
  19. should := require.New(t)
  20. input := `{"branch":"beta","change_log":"add the rows{10}","channel":"fros","create_time":"2017-06-13 16:39:08","firmware_list":"","md5":"80dee2bf7305bcf179582088e29fd7b9","note":{"CoreServices":{"md5":"d26975c0a8c7369f70ed699f2855cc2e","package_name":"CoreServices","version_code":"76","version_name":"1.0.76"},"FrDaemon":{"md5":"6b1f0626673200bc2157422cd2103f5d","package_name":"FrDaemon","version_code":"390","version_name":"1.0.390"},"FrGallery":{"md5":"90d767f0f31bcd3c1d27281ec979ba65","package_name":"FrGallery","version_code":"349","version_name":"1.0.349"},"FrLocal":{"md5":"f15a215b2c070a80a01f07bde4f219eb","package_name":"FrLocal","version_code":"791","version_name":"1.0.791"}},"pack_region_urls":{"CN":"https://s3.cn-north-1.amazonaws.com.cn/xxx-os/ttt_xxx_android_1.5.3.344.393.zip","default":"http://192.168.8.78/ttt_xxx_android_1.5.3.344.393.zip","local":"http://192.168.8.78/ttt_xxx_android_1.5.3.344.393.zip"},"pack_version":"1.5.3.344.393","pack_version_code":393,"region":"all","release_flag":0,"revision":62,"size":38966875,"status":3}`
  21. reader := strings.NewReader(input)
  22. decoder := jsoniter.ConfigCompatibleWithStandardLibrary.NewDecoder(reader)
  23. m1 := map[string]interface{}{}
  24. should.Nil(decoder.Decode(&m1))
  25. m2 := map[string]interface{}{}
  26. should.Nil(json.Unmarshal([]byte(input), &m2))
  27. should.Equal(m2, m1)
  28. should.Equal("1.0.76", m1["note"].(map[string]interface{})["CoreServices"].(map[string]interface{})["version_name"])
  29. }
  30. func Test_map_eface_of_eface(t *testing.T) {
  31. should := require.New(t)
  32. json := jsoniter.ConfigCompatibleWithStandardLibrary
  33. output, err := json.MarshalToString(map[interface{}]interface{}{
  34. "1": 2,
  35. 3: "4",
  36. })
  37. should.NoError(err)
  38. should.Equal(`{"1":2,"3":"4"}`, output)
  39. }
  40. func Test_encode_nil_map(t *testing.T) {
  41. should := require.New(t)
  42. var nilMap map[string]string
  43. output, err := jsoniter.MarshalToString(nilMap)
  44. should.NoError(err)
  45. should.Equal(`null`, output)
  46. }