首頁 > 後端開發 > Golang > 如何從 JSON 解碼非標準時間格式?

如何從 JSON 解碼非標準時間格式?

Mary-Kate Olsen
發布: 2024-11-08 20:41:02
原創
1023 人瀏覽過

How to Decode Non-Standard Time Formats from JSON?

從JSON 解碼非標準時間格式

在處理包含非標準時間格式的JSON 資料時,標準JSON 解碼可能會遇到問題,因為它期望特定的時間格式模式。為了克服這個問題,可以實作自訂編組和解組函數。

例如,考慮以下JSON:

{
    "name": "John",
    "birth_date": "1996-10-07"
}
登入後複製

假設我們想要將其解碼為Person 結構:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}
登入後複製

使用標準JSON 解碼器:

person := Person{}

decoder := json.NewDecoder(req.Body);

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}
登入後複製

會導致錯誤,因為解碼器無法解析非標準時間格式。為了解決這個問題,我們可以為時間值建立一個自訂類型別名,並實作自訂編組和解組函數。

範例實作可以是:

// Type alias
type JsonBirthDate time.Time

// Implement UnmarshalJSON
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
}

// Implement MarshalJSON
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

// Example use in struct
type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}
登入後複製

使用這些自訂函數, JSON 資料現在可以成功解碼為目標 Person 結構,並適當解析非標準時間格式。

以上是如何從 JSON 解碼非標準時間格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板