如何处理 GO 结构中 JSON 的日期字段
How to deal with date fields from JSON in a GO struct
我有一个 JSON 内容,其中包含一些日期字段,例如“resolutiondate”、“created”和“updated”,如下所示
{
"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 sheet 中。一切都按预期工作,唯一的问题是我在我的 GO 结构中将日期字段定义为字符串数据类型,如下所示:
Resolved string `json:"resolutiondate,omitempty"`
Created string `json:"created,omitempty"`
因此 excel 文件中保存的最终数据如下所示:
但我想将它们保存为 excel sheet 中用户定义的 format-mm/dd/yyyy 中的日期数据类型。我怎样才能有效地使用 Golang 的 time
包来实现这一点?请帮忙。
注意:我将无法分享我的完整代码和完整的 JSON 文件。
你可以做的是,将字符串包装为你自己的自定义类型,并使其实现 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
要从自定义格式解组,您需要创建 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")
}
我有一个 JSON 内容,其中包含一些日期字段,例如“resolutiondate”、“created”和“updated”,如下所示
{
"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 sheet 中。一切都按预期工作,唯一的问题是我在我的 GO 结构中将日期字段定义为字符串数据类型,如下所示:
Resolved string `json:"resolutiondate,omitempty"`
Created string `json:"created,omitempty"`
因此 excel 文件中保存的最终数据如下所示:
但我想将它们保存为 excel sheet 中用户定义的 format-mm/dd/yyyy 中的日期数据类型。我怎样才能有效地使用 Golang 的 time
包来实现这一点?请帮忙。
注意:我将无法分享我的完整代码和完整的 JSON 文件。
你可以做的是,将字符串包装为你自己的自定义类型,并使其实现 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
要从自定义格式解组,您需要创建 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")
}