为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 GO 结构中处理 JSON 中的日期字段

如何在 GO 结构中处理 JSON 中的日期字段

Go
九州编程 2022-10-04 19:38:52
我有一个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 文件。
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

要从自定义格式取消封接,您需要创建包装器并实现接口。time.Timejson.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")

}


查看完整回答
反对 回复 2022-10-04
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您可以做的是,将字符串包装为您自己的自定义类型,并使其实现接口:Unmarshaler


type Unmarshaler interface {

    UnmarshalJSON([]byte) error

}

然后花点时间使用JSON并将其解析为并使用您的自定义布局进行格式化。time.Timemm/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"`

在你的围棋结构和解封。


在此处运行示例代码


查看完整回答
反对 回复 2022-10-04
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号