自定义 Time.Time 的 JSON 编组
在 Go 中,encoding/json 包中的通用 Marshal 函数将 time.Time 值序列化为使用默认 ISO 8601 格式的字符串。但是,可以通过覆盖用于时间封送的布局来自定义此行为。
考虑以下结构:
<code class="go">type MyStruct struct { StartTime time.Time Name string }</code>
要在将 MyStruct 封送为 JSON 时使用自定义时间布局,我们可以将 time.Time 类型嵌入到重写 MarshalText 和 MarshalJSON 方法的自定义结构中。下面是一个示例:
<code class="go">import ( "encoding/json" "time" ) type CustomTime struct { time.Time Layout string } func (ct CustomTime) MarshalText() ([]byte, error) { return []byte(ct.Format(ct.Layout)), nil } func (ct CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + ct.Format(ct.Layout) + `"`), nil }</code>
在此自定义类型中,我们嵌入了 time.Time 并添加了一个额外的布局字段来指定所需的布局字符串。通过重写 MarshalText 和 MarshalJSON 方法,我们可以控制时间字段的格式。
要在结构中使用 CustomTime,请将 time.Time 字段替换为 CustomTime 字段,并使用所需的布局初始化 Layout 字段细绳。例如:
<code class="go">type CustomMyStruct struct { StartTime CustomTime Name string } func main() { s := CustomMyStruct{ StartTime: CustomTime{ Time: time.Now(), Layout: "2006-01-02 15:04:05", }, Name: "ali", } data, err := json.Marshal(s) if err != nil { panic(err) } fmt.Println(string(data)) }</code>
此代码将使用指定的时间布局将 MyStruct 实例序列化为 JSON。
以上是如何在 Go 中自定义'time.Time”的 JSON 编组?的详细内容。更多信息请关注PHP中文网其他相关文章!