golang如何自定义json,典型的场景,json一个时间戳,显示成date样式

自定义字段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}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值