從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中文網其他相關文章!