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

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

Patricia Arquette
Patricia Arquette原創
2024-11-09 08:37:02730瀏覽

How to Decode JSON with Non-Standard Time Formats?

非標準JSON 時間格式的自訂解組

要將非標準時間格式的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn