亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號