首頁 > 後端開發 > Golang > 主體

如何在 Go 中解組具有不正確時區偏移的 JSON?

Susan Sarandon
發布: 2024-11-05 08:25:02
原創
922 人瀏覽過

How to Unmarshal JSON with Incorrect Timezone Offset in Go?

JSON 解組中的無效日期時間格式

背景

Go 的JSON 解組有依據ISO8601/RFC3339 格式化的日期時間問題,這些日期時間在格式0200 而不是02:00。

問題

JSON 格式不正確:

2016-08-08T21:35:14.052975+0200
登入後複製

預期正確格式:

2016-08-08T21:35:14.052975+02:00
登入後複製

可能的原因:

JSON 是使用C 的strftime 函數產生的,其格式字串不包含時區偏移中的冒號。

解決方案

要解決此問題並啟用兩種格式的正確解組,可以定義自訂時間欄位類型:

<code class="go">type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)

    // Remove double quotes from JSON value
    s = s[1:len(s)-1]

    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}</code>
登入後複製

在此自訂類型中,UnmarshalJSON 方法嘗試根據RFC3339Nano(時區偏移中帶有冒號)和不帶冒號的RFC3339Nano 修改版本來解析字串。

用法

要使用自訂時間欄位類型:

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>
登入後複製

然後可以使用不正確或正確的時區偏移量從 JSON 格式解組該結構。

註解

  • 預設情況下,時間為 RFC3339Nano 格式。 Parse 使用「Z」作為時區偏移量,而在修改後的格式中,使用「Z0700」。
  • 時間格式中的年份「2006」是指 Go 發布的第一年。

以上是如何在 Go 中解組具有不正確時區偏移的 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!