要將非標準時間格式的JSON 解碼為自訂結構,內建的編組和解組函數提供了靈活性。
考慮以下JSON:
{ "name": "John", "birth_date": "1996-10-07" }
以及用於保存資料的自訂結構:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
使用預設解碼器解碼此JSON 會失敗,因為非- 標準時間格式。若要處理此問題,請實作自訂編組和解組函數:
type JsonBirthDate time.Time 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 } func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
透過將 JsonBirthDate 新增至 Person 結構並實作這些函數,以下程式碼將正確解碼 JSON:
person := Person{} decoder := json.NewDecoder(req.Body) err := decoder.Decode(&person) if err != nil { log.Println(err) } // person.BirthDate now contains the parsed time as a time.Time object
以上是如何解碼非標準時間格式的 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!