Custom Un/Marshaling untuk Format Masa JSON Bukan Standard
Apabila berurusan dengan data JSON yang mengandungi nilai masa dalam format bukan standard, penyahkod JSON terbina dalam mungkin menghadapi ralat. Untuk mengendalikan situasi sedemikian, fungsi marshal dan unmarshal tersuai boleh dilaksanakan.
Pertimbangkan JSON berikut:
{ "name": "John", "birth_date": "1996-10-07" }
Dan struct Go yang dikehendaki:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Menggunakan penyahkod JSON standard akan mengakibatkan ralat semasa menghuraikan medan "birth_date". Untuk menyesuaikan tingkah laku ini, alias jenis boleh dibuat dan ditambah pada struct:
type JsonBirthDate time.Time
Kemudian, fungsi marshal dan unmarshal tersuai dilaksanakan:
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) // Remove quotes 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 fungsi tersuai ini, JSON kini boleh dinyahkodkan ke dalam struct Go seperti yang dimaksudkan:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) } // Print the birth date using the Format function fmt.Println(person.BirthDate.Format("2006-01-02"))
Atas ialah kandungan terperinci Bagaimana untuk Custom Unmarshal Non-Standard Format Masa JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!