」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Golang 中解析 JSON 中的非標準時間格式?

如何在 Golang 中解析 JSON 中的非標準時間格式?

發佈於2024-11-09
瀏覽:430

How to Parse Non-Standard Time Formats from JSON in Golang?

從 JSON 解析非標準時間格式

將 JSON 資料解碼為自訂結構時,可能會出現日期格式不一致的情況。為了解決這個問題,Golang 提供了實作自訂 marshal 和 unmarshal 函數的選項。

自訂Marshaler 和Unmarshaler 函數

要指定自訂解析格式,類型別名為時間欄位創建,Marshaler和Unmarshaler介面實作如下:

type JsonBirthDate time.Time

// UnmarshalJSON translates a JSON string to a time value.
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`)
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

// MarshalJSON converts a time value to a JSON string.
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

此自訂邏輯檢查 JSON 值是否採用所需的格式並進行對應的解析。

更新的結構和解析

該結構是更新為使用自訂類型,解碼可以照常進行:

type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

decoder := json.NewDecoder(req.Body)
if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

附加功能

為了方便起見,可以添加Format 方法來提供日期的格式化表示:

// Format prints the date using the specified format string.
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}

這種自訂編組和解組方法允許靈活地解析 JSON 中的時間值,即使它們偏離標準格式也是如此。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3