首頁  >  文章  >  後端開發  >  如何在 Golang 中自訂 time.Time 欄位的 JSON 佈局?

如何在 Golang 中自訂 time.Time 欄位的 JSON 佈局?

Susan Sarandon
Susan Sarandon原創
2024-11-01 08:42:02671瀏覽

How to Customize the JSON Layout for time.Time Fields in Golang?

Golang 中自訂 time.Time 的 JSON 佈局

在 Golang 中,encoding/json.Marshal 函數通常用於將物件轉換為 JSON。但是,在預設設定下,它可能與所需的 JSON 佈局不一致。本文介紹了一種覆寫預設佈局並自訂 JSON 編組期間 time.Time 欄位所使用的格式的解決方案。

讓我們假設您有一個帶有名為 starttime 的 time.Time 欄位的 struct 。將此結構編組為 JSON 時,您希望使用特定的自訂佈局。

s := {"starttime":time.Now(), "name":"ali"}

要實現此目的,我們可以建立一個嵌入 time.Time 的自訂類型並覆寫 MarshalText 和 MarshalJSON 方法。

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

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
}</code>

透過重寫 MarshalText,我們控制 jsonTime 類型如何將其值轉換為文字形式,從而允許我們指定自訂佈局。此外,透過重寫 MarshalJSON,我們確保使用重寫的方法而不是內建 time.Time 實作 JSON 編組。

使用自訂jsonTime 類型,您現在可以使用所需的佈局編組您的s 結構:

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

這將產生一個JSON 字串,其中starttime 欄位根據time.Kitchen佈局進行格式化。

以上是如何在 Golang 中自訂 time.Time 欄位的 JSON 佈局?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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