jsoniter_raw_message_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package jsoniter
  2. import (
  3. "encoding/json"
  4. "github.com/json-iterator/go/require"
  5. "testing"
  6. )
  7. func Test_json_RawMessage(t *testing.T) {
  8. should := require.New(t)
  9. var data json.RawMessage
  10. should.Nil(Unmarshal([]byte(`[1,2,3]`), &data))
  11. should.Equal(`[1,2,3]`, string(data))
  12. str, err := MarshalToString(data)
  13. should.Nil(err)
  14. should.Equal(`[1,2,3]`, str)
  15. }
  16. func Test_jsoniter_RawMessage(t *testing.T) {
  17. should := require.New(t)
  18. var data RawMessage
  19. should.Nil(Unmarshal([]byte(`[1,2,3]`), &data))
  20. should.Equal(`[1,2,3]`, string(data))
  21. str, err := MarshalToString(data)
  22. should.Nil(err)
  23. should.Equal(`[1,2,3]`, str)
  24. }
  25. func Test_json_RawMessage_in_struct(t *testing.T) {
  26. type TestObject struct {
  27. Field1 string
  28. Field2 json.RawMessage
  29. }
  30. should := require.New(t)
  31. var data TestObject
  32. should.Nil(Unmarshal([]byte(`{"field1": "hello", "field2": [1,2,3]}`), &data))
  33. should.Equal(` [1,2,3]`, string(data.Field2))
  34. should.Equal(`hello`, data.Field1)
  35. }
  36. func Test_decode_map_of_raw_message(t *testing.T) {
  37. should := require.New(t)
  38. type RawMap map[string]*json.RawMessage
  39. b := []byte("{\"test\":[{\"key\":\"value\"}]}")
  40. var rawMap RawMap
  41. should.Nil(Unmarshal(b, &rawMap))
  42. should.Equal(`[{"key":"value"}]`, string(*rawMap["test"]))
  43. type Inner struct {
  44. Key string `json:"key"`
  45. }
  46. var inner []Inner
  47. Unmarshal(*rawMap["test"], &inner)
  48. should.Equal("value", inner[0].Key)
  49. }
  50. func Test_encode_map_of_raw_message(t *testing.T) {
  51. should := require.New(t)
  52. type RawMap map[string]*json.RawMessage
  53. value := json.RawMessage("[]")
  54. rawMap := RawMap{"hello": &value}
  55. output, err := MarshalToString(rawMap)
  56. should.Nil(err)
  57. should.Equal(`{"hello":[]}`, output)
  58. }
  59. func Test_encode_map_of_jsoniter_raw_message(t *testing.T) {
  60. should := require.New(t)
  61. type RawMap map[string]*RawMessage
  62. value := RawMessage("[]")
  63. rawMap := RawMap{"hello": &value}
  64. output, err := MarshalToString(rawMap)
  65. should.Nil(err)
  66. should.Equal(`{"hello":[]}`, output)
  67. }