首页 > 后端开发 > Golang > 正文

如何在 Go 中自定义'time.Time”的 JSON 编组?

Mary-Kate Olsen
发布: 2024-11-02 03:09:30
原创
804 人浏览过

How can I customize JSON marshaling for `time.Time` in Go?

自定义 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!