自定义字段json,只需要继承marshaler和unmarshaler
官方的接口如下:
type Marshaler interface {
MarshalJSON() ([]byte, error)
}
type Unmarshaler interface {
UnmarshalJSON([]byte) error
}
所以直接订制该字段的接口实现即可
直接上代码了
package main
import (
"encoding/json"
"fmt"
"time"
)
type TimeStamp int64
type D struct {
Name string `json:"name"`
Age int `json:"age"`
Ts TimeStamp `json:"ts"`
}
func (d TimeStamp) MarshalJSON() ([]byte, error){
rs :=time.Unix(int64(d),0).Format("2006-01-02")
js,er := json.Marshal(rs)
return js,er
}
func (d *TimeStamp) UnmarshalJSON(data []byte) error{
var rs string
e := json.Unmarshal(data,&rs)
if e!=nil{
return e
}
t,er:= time.Parse("2006-01-02", rs)
if er!=nil{
return er
}
*d = TimeStamp(t.Unix())
return nil
}
func main() {
d :=D{
Name:"ft",
Age:9,
Ts: (TimeStamp)(time.Now().Unix()),
}
js,er:=json.Marshal(d)
if er!=nil{
fmt.Println(er.Error())
return
}
fmt.Println("result:",string(js))
var d2 D
e:=json.Unmarshal(js,&d2)
if e!=nil{
fmt.Println(er.Error())
return
}
fmt.Println("result:",d2)
}
结果:
result: {"name":"ft","age":9,"ts":"2018-09-30"}
result: {ft 9 1538265600}