Menyahkod Format Masa Bukan Standard daripada JSON
Apabila berurusan dengan data JSON yang mengandungi format masa bukan standard, penyahkodan JSON standard mungkin dihadapi isu kerana ia menjangkakan corak format masa tertentu. Untuk mengatasinya, fungsi marshal dan unmarshal tersuai boleh dilaksanakan.
Sebagai contoh, pertimbangkan JSON berikut:
{ "name": "John", "birth_date": "1996-10-07" }
Andaikan kita ingin menyahkod ini menjadi struct Person:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Menggunakan penyahkod JSON standard:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) }
membawa kepada ralat, kerana penyahkod tidak boleh menghuraikan format masa bukan standard. Untuk menangani perkara ini, kita boleh mencipta alias jenis tersuai untuk nilai masa dan melaksanakan fungsi marshal dan unmarshal tersuai.
Contoh pelaksanaan boleh:
// Type alias type JsonBirthDate time.Time // Implement UnmarshalJSON 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 } // Implement MarshalJSON func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) } // Example use in struct type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
Dengan fungsi tersuai ini, Data JSON kini boleh berjaya dinyahkodkan ke dalam struct Person sasaran, dengan format masa bukan standard dihuraikan dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimana untuk Menyahkod Format Masa Bukan Standard daripada JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!