Menghuraikan Format Masa Bukan Standard daripada JSON
Apabila menyahkod data JSON ke dalam struktur tersuai, ketidakkonsistenan dalam format tarikh boleh timbul. Untuk menangani perkara ini, Golang menyediakan pilihan untuk melaksanakan fungsi marshal dan unmarshaler tersuai.
Fungsi Marshal dan Unmarshaler Tersuai
Untuk menentukan format penghuraian tersuai, alias jenis ialah dicipta untuk medan masa, dan antara muka Marshaler dan Unmarshaler dilaksanakan seperti berikut:
type JsonBirthDate time.Time // UnmarshalJSON translates a JSON string to a time value. 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 } // MarshalJSON converts a time value to a JSON string. func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
Logik tersuai ini menyemak sama ada nilai JSON berada dalam format yang dikehendaki dan menghuraikannya dengan sewajarnya.
Struktur dan Penghuraian Kemas Kini
Struktur dikemas kini untuk menggunakan jenis tersuai dan penyahkodan boleh diteruskan seperti biasa:
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` } decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
Ciri Tambahan
Untuk kemudahan, kaedah Format boleh ditambah untuk menyediakan perwakilan berformat tarikh:
// Format prints the date using the specified format string. func (j JsonBirthDate) Format(s string) string { t := time.Time(j) return t.Format(s) }
Pendekatan marshaling dan unmarshaling tersuai ini membolehkan penghuraian fleksibel nilai masa daripada JSON walaupun semasa mereka menyimpang daripada format standard.
Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Format Masa Bukan Standard daripada JSON di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!