Menyesuaikan JSON Time Unmarshaling in Go
Apabila berurusan dengan data JSON yang mengandungi nilai masa, pakej pengekodan/json dalam Go boleh mengehadkan jika format masa tidak mematuhi RFC 3339. Walaupun mungkin untuk menukar masa secara manual kepada RFC Format 3339 untuk penghuraian, terdapat pendekatan yang lebih cekap.
Laksanakan Antara Muka Marshaler/Unmarshaler
Untuk mengendalikan format masa tersuai, cipta jenis tersuai yang melaksanakan json.Marshaler dan antara muka json.Unmarshaler. Ini membolehkan anda menentukan cara nilai masa harus disiri dan dinyahsiri.
Berikut ialah contoh jenis tersuai yang dipanggil CustomTime:
type CustomTime struct { time.Time } const ctLayout = "2006/01/02|15:04:05" func (ct *CustomTime) UnmarshalJSON(b []byte) (err error) { s := strings.Trim(string(b), "\"") if s == "null" { ct.Time = time.Time{} return } ct.Time, err = time.Parse(ctLayout, s) return } func (ct *CustomTime) MarshalJSON() ([]byte, error) { if ct.Time.IsZero() { return []byte("null"), nil } return []byte(fmt.Sprintf("\"%s\"", ct.Time.Format(ctLayout))), nil } var nilTime = (time.Time{}).UnixNano() func (ct *CustomTime) IsSet() bool { return !ct.IsZero() }
Dalam jenis tersuai ini:
Penggunaan
Setelah jenis CustomTime adalah ditakrifkan, ia boleh digunakan sebagai medan struct untuk menyahsiri data JSON dengan format masa tersuai.
type Args struct { Time CustomTime } var data = ` { "Time": "2014/08/01|11:27:18" } ` func main() { a := Args{} fmt.Println(json.Unmarshal([]byte(data), &a)) fmt.Println(a.Time.String()) }
Contoh ini berjaya menyahsiri data JSON di mana medan Masa berada dalam adat "2006/01/02| Format 15:04:05".
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan JSON Time Unmarshaling dalam Go to Handle Non-RFC 3339 Formats?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!