在Golang 中使用Override 自訂時間欄位的JSON 編組
在Go 中,encoding/json 的Marshal 函數提供了一種簡單的方法來轉換資料結構轉換為JSON。但是,它使用 time.Time 欄位的預設佈局。本文探討如何重寫此佈局以使用自訂格式。
考慮以下結構:
<code class="go">type Person struct { age int name string dob time.Time }</code>
預設情況下,編組此結構會將 dob 欄位轉換為 RFC3339 佈局,這可能並不總是理想的。
要覆寫預設佈局,我們可以使用嵌入time.Time 並實作MarshalJSON 的自訂類型:
<code class="go">type CustomTime struct { time.Time } func (t CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + t.Format("my_custom_layout") + `"`), nil }</code>
現在,將time.Time 替換為CustomTime在Person 結構中:
<code class="go">type Person struct { age int name string dob CustomTime }</code>
封送此修改後的Person 結構時,自訂佈局將套用於dob 欄位。
範例:
<code class="go">package main import ( "encoding/json" "fmt" "time" ) type Person struct { age int name string dob CustomTime } func main() { dob := time.Now() p := Person{25, "John Doe", CustomTime{dob}} jsonBytes, err := json.Marshal(p) if err != nil { fmt.Println(err) return } fmt.Println(string(jsonBytes)) }</code>
輸出:{"age":25,"name":"John Doe","dob":"2023-03- 08T14:41:21 00:00"}
在此例如,自訂佈局是“my_custom_layout”,它不存在於Person 結構中。相反,我們直接在 CustomTime 的 MarshalJSON 方法中指定它。
此自訂可讓您在使用 Marshal 函數時控制時間的佈局。 Time 字段,提供對 JSON 表示的靈活性和控制。
以上是如何在 Golang 中自訂時間欄位的 JSON 編組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!