golang json 序列化 time 轉(zhuǎn)換成 timestamp

golang json 序列化 time 轉(zhuǎn)換成 timestamp

假如我希望得到如下的json串:
{"OrderId":"10001","CreateTime":1535080735}
相應(yīng)的可能需要?jiǎng)?chuàng)建相應(yīng)的結(jié)構(gòu)體:

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

接著創(chuàng)建相應(yīng)的對(duì)象,并對(duì)其進(jìn)行json序列化操作,不過得到的結(jié)果不會(huì)滿足要求,因?yàn)榻Y(jié)果是如下樣子的:
{"OrderId":"10001","CreateTime":"2018-08-24T11:23:40.284609807+08:00"}

問題出現(xiàn)在了Time的序列化方法上了,接下來是如何解決這個(gè)問題的方法。
首先根據(jù)Time創(chuàng)建一個(gè)自己的時(shí)間類型

type UnixTime time.Time

然后讓該類型實(shí)現(xiàn)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結(jié)構(gòu)體

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

再對(duì)order對(duì)象進(jìn)行json序列話操作的時(shí)候就會(huì)得到想要的結(jié)果了
{"OrderId":"10001","CreateTime":1535081768}
注意:本例中實(shí)現(xiàn)的10位的時(shí)間戳,如果需要實(shí)現(xiàn)13位的時(shí)間戳,只要調(diào)整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
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 使用Hive實(shí)現(xiàn)時(shí)間拉鏈功能 - 菠蘿大數(shù)據(jù)夢(mèng)工廠(Free World) - 博客頻道 - CSDN.NET ...
    葡萄喃喃囈語閱讀 928評(píng)論 0 1
  • 對(duì)日離岸開發(fā),基本定位在以Cost-Down為目的的一種軟件開發(fā)外包。在這種背景下的受注方會(huì)有以下現(xiàn)象: 1)人員...
    joefit閱讀 477評(píng)論 0 1
  • 容得下孤單的靈魂, 才看得見微小的幸福。
    不過荒唐閱讀 483評(píng)論 0 0
  • 不堪多少往事,耗盡今生笑語,既難忘,一酒獨(dú)休,休盡今生今世。 不知多少春秋,流盡歲月芳容,終不忘,一劍獨(dú)行,行盡此...
    OP1997閱讀 395評(píng)論 2 2

友情鏈接更多精彩內(nèi)容