首頁 >後端開發 >Golang >在 Golang 中編組為 JSON 時如何自訂 time.Time 版面?

在 Golang 中編組為 JSON 時如何自訂 time.Time 版面?

Patricia Arquette
Patricia Arquette原創
2024-11-03 03:55:02733瀏覽

How can I customize the time.Time layout when marshalling to JSON in Golang?

自訂JSON編組的Time.Time佈局

在Golang的encoding/json套件中,time.Time值的預設版面是「2006 -01-02T15:04:05Z」。但是,可以覆寫此佈局以使用自訂格式字串。

解決方案:

覆寫 json.Marshal 用於 time.Time 欄位的佈局,您可以定義一個嵌入 time.Time 並實作 MarshalText 介面的新類型。此介面定義了一個傳回值的位元組表示形式的方法。下面的程式碼示範如何實現這一點:

<code class="go">package main

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

type jsonTime struct {
    time.Time
    f string
}

func (j jsonTime) format() string {
    return j.Time.Format(j.f)
}

func (j jsonTime) MarshalText() ([]byte, error) {
    return []byte(j.format()), nil
}

func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}

func main() {
    jt := jsonTime{time.Now(), time.Kitchen}
    x := map[string]interface{}{
        "foo": jt,
        "bar": "baz",
    }
    data, err := json.Marshal(x)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s", data)
}</code>

在此程式碼中,jsonTime 結構嵌入了一個time.Time 值並定義了一個自訂format() 方法,以使用指定佈局將時間作為字串返回。它還實作了 MarshalText 和 MarshalJSON 接口,以在 JSON 編組期間傳回自訂字串表示形式。

透過使用此方法,您可以控制用於時間的佈局。 JSON 輸出中的時間值並根據您的特定情況進行自訂要求。

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

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