golang json 序列化 time 转换成 timestamp

golang json 序列化 time 转换成 timestamp

假如我希望得到如下的json串:
{"OrderId":"10001","CreateTime":1535080735}
相应的可能需要创建相应的结构体:

type Order struct {
    Order_id    string    `json:"OrderId"`
    Create_time time.Time `json:"CreateTime"`
}

接着创建相应的对象,并对其进行json序列化操作,不过得到的结果不会满足要求,因为结果是如下样子的:
{"OrderId":"10001","CreateTime":"2018-08-24T11:23:40.284609807+08:00"}

问题出现在了Time的序列化方法上了,接下来是如何解决这个问题的方法。
首先根据Time创建一个自己的时间类型

type UnixTime time.Time

然后让该类型实现json.Marshaler接口

// MarshalJSON implements json.Marshaler.
func (t UnixTime) MarshalJSON() ([]byte, error) {
    //do your serializing here
    stamp := fmt.Sprintf("%d", time.Time(t).Unix())
    return []byte(stamp), nil
}

最后修改Order结构体

type Order struct {
    Order_id    string   `json:"OrderId"`
    Create_time UnixTime `json:"CreateTime"`
}

再对order对象进行json序列话操作的时候就会得到想要的结果了
{"OrderId":"10001","CreateTime":1535081768}
注意:本例中实现的10位的时间戳,如果需要实现13位的时间戳,只要调整MarshalJSON方法就可以了
完整代码如下:

package main

import (
    "time"
    "fmt"
    "encoding/json"
)

func main() {
    order := Order{Order_id: "10001",
        Create_time: UnixTime(time.Now())}

    orderBytes, err := json.Marshal(order)
    if err != nil {
        fmt.Print(err)
    } else {
        fmt.Println(string(orderBytes))
    }
}

type Order struct {
    Order_id    string   `json:"OrderId"`
    Create_time UnixTime `json:"CreateTime"`
}

type UnixTime time.Time

// MarshalJSON implements json.Marshaler.
func (t UnixTime) MarshalJSON() ([]byte, error) {
    //do your serializing here
    stamp := fmt.Sprintf("%d", time.Time(t).Unix())
    return []byte(stamp), nil
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,491评论 19 139
  • 使用Hive实现时间拉链功能 - 菠萝大数据梦工厂(Free World) - 博客频道 - CSDN.NET ...
    葡萄喃喃呓语阅读 4,334评论 0 1
  • 对日离岸开发,基本定位在以Cost-Down为目的的一种软件开发外包。在这种背景下的受注方会有以下现象: 1)人员...
    joefit阅读 3,017评论 0 1
  • 容得下孤单的灵魂, 才看得见微小的幸福。
    不过荒唐阅读 3,222评论 0 0
  • 不堪多少往事,耗尽今生笑语,既难忘,一酒独休,休尽今生今世。 不知多少春秋,流尽岁月芳容,终不忘,一剑独行,行尽此...
    OP1997阅读 2,812评论 2 2