fuzzy_decoder.go 611 B

12345678910111213141516171819202122232425262728
  1. package extra
  2. import (
  3. "github.com/json-iterator/go"
  4. "unsafe"
  5. "encoding/json"
  6. )
  7. func RegisterFuzzyDecoders() {
  8. jsoniter.RegisterTypeDecoder("string", &FuzzyStringDecoder{})
  9. }
  10. type FuzzyStringDecoder struct {
  11. }
  12. func (decoder *FuzzyStringDecoder) Decode(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
  13. valueType := iter.WhatIsNext()
  14. switch valueType {
  15. case jsoniter.Number:
  16. var number json.Number
  17. iter.ReadVal(&number)
  18. *((*string)(ptr)) = string(number)
  19. case jsoniter.String:
  20. *((*string)(ptr)) = iter.ReadString()
  21. default:
  22. iter.ReportError("FuzzyStringDecoder", "not number or string")
  23. }
  24. }