Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahkod JSON dengan Format Masa Bukan Standard?

Bagaimana untuk Menyahkod JSON dengan Format Masa Bukan Standard?

Patricia Arquette
Patricia Arquetteasal
2024-11-09 08:37:02751semak imbas

How to Decode JSON with Non-Standard Time Formats?

Custom Unmarshal for Non-Standard JSON Time Format

Untuk menyahkod JSON dengan format masa bukan standard ke dalam struct tersuai, fungsi marshal dan unmarshal terbina dalam memberikan fleksibiliti.

Pertimbangkan JSON berikut:

{
    "name": "John",
    "birth_date": "1996-10-07"
}

Dan struct tersuai untuk menyimpan data:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}

Menyahkod JSON ini menggunakan penyahkod lalai gagal kerana bukan -format masa standard. Untuk mengendalikan ini, laksanakan fungsi marshal dan unmarshal tersuai:

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))
}

Dengan menambahkan JsonBirthDate pada struct Person dan melaksanakan fungsi ini, kod berikut akan menyahkod JSON dengan betul:

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

Atas ialah kandungan terperinci Bagaimana untuk Menyahkod JSON dengan Format Masa Bukan Standard?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn