首頁  >  文章  >  後端開發  >  如何在 Go 中自訂「time.Time」的 JSON 編組?

如何在 Go 中自訂「time.Time」的 JSON 編組?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 03:09:30805瀏覽

How can I customize JSON marshaling for `time.Time` in Go?

自訂Time.Time 的JSON 編組

在Go 中,encoding/json 套件中的通用Marshal 函數將time.Time 值序列化為使用預設ISO 8601 格式的字串。但是,可以透過覆寫用於時間封送的佈局來自訂此行為。

考慮以下結構:

<code class="go">type MyStruct struct {
    StartTime time.Time
    Name      string
}</code>

要在將MyStruct 封送為JSON 時使用自訂時間佈局,我們可以將time.Time 類型嵌入到重寫MarshalText 和MarshalJSON 方法的自訂結構中。下面是一個範例:

<code class="go">import (
    "encoding/json"
    "time"
)

type CustomTime struct {
    time.Time
    Layout string
}

func (ct CustomTime) MarshalText() ([]byte, error) {
    return []byte(ct.Format(ct.Layout)), nil
}

func (ct CustomTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + ct.Format(ct.Layout) + `"`), nil
}</code>

在此自訂類型中,我們嵌入了 time.Time 並添加了一個額外的佈局欄位來指定所需的佈局字串。透過重寫 MarshalText 和 MarshalJSON 方法,我們可以控制時間欄位的格式。

要在結構中使用 CustomTime,請將 time.Time 字段替換為 CustomTime 字段,並使用所需的佈局初始化 Layout 字段細繩。例如:

<code class="go">type CustomMyStruct struct {
    StartTime CustomTime
    Name      string
}

func main() {
    s := CustomMyStruct{
        StartTime: CustomTime{
            Time:   time.Now(),
            Layout: "2006-01-02 15:04:05",
        },
        Name: "ali",
    }

    data, err := json.Marshal(s)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(data))
}</code>

此程式碼將使用指定的時間佈局將 MyStruct 實例序列化為 JSON。

以上是如何在 Go 中自訂「time.Time」的 JSON 編組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn