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

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

Susan Sarandon
發布: 2024-11-01 08:42:02
原創
777 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板