mirror of
https://github.com/json-iterator/go.git
synced 2024-11-27 08:30:57 +02:00
45 lines
954 B
Go
45 lines
954 B
Go
|
package jsoniter
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
"unsafe"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
func Test_customize_type_decoder(t *testing.T) {
|
||
|
RegisterTypeDecoder("time.Time", func(ptr unsafe.Pointer, iter *Iterator) {
|
||
|
t, err := time.ParseInLocation("2006-01-02 15:04:05", iter.ReadString(), time.UTC)
|
||
|
if err != nil {
|
||
|
iter.Error = err
|
||
|
return
|
||
|
}
|
||
|
*((*time.Time)(ptr)) = t
|
||
|
})
|
||
|
defer ClearDecoders()
|
||
|
val := time.Time{}
|
||
|
err := Unmarshal([]byte(`"2016-12-05 08:43:28"`), &val)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
year, month, day := val.Date()
|
||
|
if year != 2016 || month != 12 || day != 5 {
|
||
|
t.Fatal(val)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type Tom struct {
|
||
|
field1 string
|
||
|
}
|
||
|
|
||
|
func Test_customize_field_decoder(t *testing.T) {
|
||
|
RegisterFieldDecoder("jsoniter.Tom", "field1", func(ptr unsafe.Pointer, iter *Iterator) {
|
||
|
*((*string)(ptr)) = strconv.Itoa(iter.ReadInt())
|
||
|
})
|
||
|
defer ClearDecoders()
|
||
|
tom := Tom{}
|
||
|
err := Unmarshal([]byte(`{"field1": 100}`), &tom)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
}
|