登录
首页 >  Golang >  Go问答

JSON 日期字段在 GO 结构中的处理方法

来源:stackoverflow

时间:2024-02-16 20:45:20 247浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《JSON 日期字段在 GO 结构中的处理方法》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我有一个 json 内容,其中包含一些日期字段,例如“解决日期”、“创建”和“更新”,如下所示

{
   "expand":"names,schema",
   "startat":0,
   "maxresults":50,
   "total":1,
   "issues":[
      {
         "expand":"operations,versionedrepresentations,editmeta,changelog,renderedfields",
         "id":"id",
         "self":"https://url1",
         "key":"key1",
         "fields":{
            "summary":"summary-1",
            "customfield_10406":null,
            "resolutiondate":"2021-06-10t10:07:35.000+0000",
            "created":"2021-06-10t10:05:24.000+0000",
            "description":"description-1",
            ...
            ...
            ...
}

我正在将此 json 数据解组到 go 结构中,并将数据保存在 excel 工作表中。一切都按预期工作,唯一的问题是我在 go 结构中将日期字段定义为字符串数据类型,如下所示:

Resolved           string `json:"resolutiondate,omitempty"`
        Created            string `json:"created,omitempty"`

因此,保存在 excel 文件中的最终数据如下所示:

但我想将它们保存为 excel 工作表中的日期数据类型,采用用户定义的格式 -mm/dd/yyyy。如何有效地使用 golang 的 time 包来实现此目的?请帮忙。

注意:我将无法分享我的完整代码和完整的 json 文件。


正确答案


要从自定义格式解组,您需要创建 time.time 包装器并实现 json.unmarshaler 接口。

type customtime struct {
    time.time
}

func (t *customtime) unmarshaljson(b []byte) (err error) {
    date, err := time.parse(`"2006-01-02t15:04:05.000-0700"`, string(b))
    if err != nil {
        return err
    }
    t.time = date
    return
}

现在将您的时间字段指定为 customtime

resolved           customtime `json:"resolutiondate,omitempty"`
created            customtime `json:"created,omitempty"`

要写入 excel,您需要提供有关实施的更多信息。

但是示例解决方案:

func (t *customtime) exceldate() string {
    return t.format("01/02/2006")
}

你可以做的是将 string 包装为你自己的自定义类型,并使其实现 unmarshaler 接口:

type unmarshaler interface {
    unmarshaljson([]byte) error
}

然后花时间使用 json 并将其解析为 time.time 并使用自定义布局 mm/dd/yyyy 进行格式化。

type date string

func (d *date) unmarshaljson(bytes []byte) error {
    dd, err := time.parse(`"2006-01-02t15:04:05.000+0000"`, string(bytes))
    if err != nil{
        return err
    }
    *d = date(dd.format("01/02/2006"))

    return nil
}

现在您可以使用

Created            Date `json:"created,omitempty"`

在你的 go 结构体中并解组。

运行示例代码here

以上就是《JSON 日期字段在 GO 结构中的处理方法》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>