首页 >后端开发 >Golang >在 Golang 中编组为 JSON 时如何自定义 time.Time 布局?

在 Golang 中编组为 JSON 时如何自定义 time.Time 布局?

Patricia Arquette
Patricia Arquette原创
2024-11-03 03:55:02693浏览

How can I customize the time.Time layout when marshalling to JSON in Golang?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn