jsoniter_object_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package misc_tests
  2. import (
  3. "bytes"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. "github.com/json-iterator/go"
  7. )
  8. func Test_empty_object(t *testing.T) {
  9. should := require.New(t)
  10. iter := jsoniter.ParseString(jsoniter.ConfigDefault, `{}`)
  11. field := iter.ReadObject()
  12. should.Equal("", field)
  13. iter = jsoniter.ParseString(jsoniter.ConfigDefault, `{}`)
  14. iter.ReadObjectCB(func(iter *jsoniter.Iterator, field string) bool {
  15. should.FailNow("should not call")
  16. return true
  17. })
  18. }
  19. func Test_one_field(t *testing.T) {
  20. should := require.New(t)
  21. iter := jsoniter.ParseString(jsoniter.ConfigDefault, `{"a": "stream"}`)
  22. field := iter.ReadObject()
  23. should.Equal("a", field)
  24. value := iter.ReadString()
  25. should.Equal("stream", value)
  26. field = iter.ReadObject()
  27. should.Equal("", field)
  28. iter = jsoniter.ParseString(jsoniter.ConfigDefault, `{"a": "stream"}`)
  29. should.True(iter.ReadObjectCB(func(iter *jsoniter.Iterator, field string) bool {
  30. should.Equal("a", field)
  31. iter.Skip()
  32. return true
  33. }))
  34. }
  35. func Test_two_field(t *testing.T) {
  36. should := require.New(t)
  37. iter := jsoniter.ParseString(jsoniter.ConfigDefault, `{ "a": "stream" , "c": "d" }`)
  38. field := iter.ReadObject()
  39. should.Equal("a", field)
  40. value := iter.ReadString()
  41. should.Equal("stream", value)
  42. field = iter.ReadObject()
  43. should.Equal("c", field)
  44. value = iter.ReadString()
  45. should.Equal("d", value)
  46. field = iter.ReadObject()
  47. should.Equal("", field)
  48. iter = jsoniter.ParseString(jsoniter.ConfigDefault, `{"field1": "1", "field2": 2}`)
  49. for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
  50. switch field {
  51. case "field1":
  52. iter.ReadString()
  53. case "field2":
  54. iter.ReadInt64()
  55. default:
  56. iter.ReportError("bind object", "unexpected field")
  57. }
  58. }
  59. }
  60. func Test_write_object(t *testing.T) {
  61. should := require.New(t)
  62. buf := &bytes.Buffer{}
  63. stream := jsoniter.NewStream(jsoniter.Config{IndentionStep: 2}.Froze(), buf, 4096)
  64. stream.WriteObjectStart()
  65. stream.WriteObjectField("hello")
  66. stream.WriteInt(1)
  67. stream.WriteMore()
  68. stream.WriteObjectField("world")
  69. stream.WriteInt(2)
  70. stream.WriteObjectEnd()
  71. stream.Flush()
  72. should.Nil(stream.Error)
  73. should.Equal("{\n \"hello\": 1,\n \"world\": 2\n}", buf.String())
  74. }