非標準JSON 時間格式的自訂取消/編組
處理包含非標準格式時間值的JSON 資料時,內建JSON 解碼器可能會遇到錯誤。為了處理這種情況,可以實作自訂編組和解組函數。
考慮以下 JSON:
{ "name": "John", "birth_date": "1996-10-07" }
以及所需的 Go 架構:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
使用標準 JSON 解碼器在解析「birth_date」欄位時會導致錯誤。若要自訂此行為,可以建立類型別名並將其新增至結構:
type JsonBirthDate time.Time
然後,實作自訂編組和解組函數:
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) // Remove quotes t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
透過這些自訂函數,現在可以將 JSON 解碼為 Go 結構體:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) } // Print the birth date using the Format function fmt.Println(person.BirthDate.Format("2006-01-02"))
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3