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