從 JSON 解析非標準時間格式
將 JSON 資料解碼為自訂結構時,可能會出現日期格式不一致的情況。為了解決這個問題,Golang 提供了實作自訂編組和解組函數的選項。
自訂編組器和解組器函數
要指定自訂解析格式,類型別名為時間欄位創建,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 中的時間值,即使在它們偏離標準格式。
以上是如何在 Golang 中解析 JSON 中的非標準時間格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!