在 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中文網其他相關文章!