jsoniter_customize_test.go 954 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package jsoniter
  2. import (
  3. "testing"
  4. "time"
  5. "unsafe"
  6. "strconv"
  7. )
  8. func Test_customize_type_decoder(t *testing.T) {
  9. RegisterTypeDecoder("time.Time", func(ptr unsafe.Pointer, iter *Iterator) {
  10. t, err := time.ParseInLocation("2006-01-02 15:04:05", iter.ReadString(), time.UTC)
  11. if err != nil {
  12. iter.Error = err
  13. return
  14. }
  15. *((*time.Time)(ptr)) = t
  16. })
  17. defer ClearDecoders()
  18. val := time.Time{}
  19. err := Unmarshal([]byte(`"2016-12-05 08:43:28"`), &val)
  20. if err != nil {
  21. t.Fatal(err)
  22. }
  23. year, month, day := val.Date()
  24. if year != 2016 || month != 12 || day != 5 {
  25. t.Fatal(val)
  26. }
  27. }
  28. type Tom struct {
  29. field1 string
  30. }
  31. func Test_customize_field_decoder(t *testing.T) {
  32. RegisterFieldDecoder("jsoniter.Tom", "field1", func(ptr unsafe.Pointer, iter *Iterator) {
  33. *((*string)(ptr)) = strconv.Itoa(iter.ReadInt())
  34. })
  35. defer ClearDecoders()
  36. tom := Tom{}
  37. err := Unmarshal([]byte(`{"field1": 100}`), &tom)
  38. if err != nil {
  39. t.Fatal(err)
  40. }
  41. }