diff --git a/single_file_tests/json.go b/single_file_tests/json.go index 744c10a..e29ea45 100644 --- a/single_file_tests/json.go +++ b/single_file_tests/json.go @@ -1,20 +1,45 @@ package main import ( - "encoding/json" + "encoding/json" + "strconv" "fmt" ) -type Test struct { - Name string `json:"name"` - Name2 string `json:"name2"` - Name3 string `json:"name3,omitempty"` - Age int32 `json:"age"` - NotSer string `json:"-"` - Bool bool `json:"bool"` - BoolInStr bool `json:"bool_in_str,string"` +type TheLong struct { + Value int64 } +type Test struct { + Name string `json:"name"` + Name2 string `json:"name2"` + Name3 string `json:"name3,omitempty"` + Age int32 `json:"age"` + NotSer string `json:"-"` + Bool bool `json:"bool"` + BoolInStr bool `json:"bool_in_str,string"` + Long int64 `json:"long"` + Long2 TheLong `json:"long2"` +} + +// https://www.cnblogs.com/yorkyang/p/8990570.html +func (l *TheLong) MarshalJSON() (data []byte, err error) { + fmt.Println("------")//?? + if l != nil { + data = []byte(strconv.FormatInt(l.Value, 10)) + } + return +} +func (l *TheLong) UnmarshalJSON(data []byte) error { + v, err := strconv.ParseInt(string(data), 10, 64) + if err != nil { + return err + } + l.Value = v + return nil +} + + func main() { t := Test { Name: "hatter", @@ -24,6 +49,8 @@ func main() { NotSer: "not ser!", Bool: true, BoolInStr: true, + Long: 342438204823084023, + Long2: TheLong { Value: 1111111111111111111 }, } s, err := json.Marshal(t) if err != nil {