Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyahmarshal Datetime yang Diformat dengan Salah dalam Go?

Bagaimana untuk Menyahmarshal Datetime yang Diformat dengan Salah dalam Go?

DDD
DDDasal
2024-11-07 21:48:03388semak imbas

How to Unmarshal Incorrectly Formatted Datetime in Go?

Menyahmarshalling Datetime Salah Format

Apabila menghadapi JSON dengan medan datetime yang tidak diformatkan dengan betul, adalah penting untuk merangka strategi yang mantap untuk menghuraikan dan menyahmarshal mereka ke dalam struct Go. Format yang salah biasanya melibatkan ketiadaan aksara bertindih ":" dalam zon waktu mengimbangi, yang membawa kepada ralat unmarshalling.

Penyelesaian: Jenis Tersuai dan Kaedah UnmarshalJSON

Kepada menyelesaikan isu ini, jenis tersuai boleh ditakrifkan untuk menyokong kedua-dua format yang betul dan salah:

<code class="go">type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)
    s = s[1:len(s)-1]

    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}</code>

Apabila unmarshalling, kaedah UnmarshalJSON jenis ini digunakan. Ia mula-mula mengalih keluar petikan di sekeliling daripada rentetan JSON. Ia kemudian cuba menghuraikan masa tarikh menggunakan format masa standard.RFC3339Nano. Jika gagal, ia terus mencuba menghuraikan menggunakan format yang salah tanpa aksara bertindih ("2006-01-02T15:04:05.999999999Z0700").

Definisi Struktur

Untuk menggunakan jenis tersuai ini dalam struct Go:

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>

Ini memastikan JSON dengan kedua-dua format datetime yang betul dan tidak betul boleh dinyahmarshalkan ke dalam struct Go yang sama.

Kesimpulan

Dengan mentakrifkan jenis medan masa tersuai dengan kaedah UnmarshalJSON yang sesuai, adalah mungkin untuk menghuraikan dan menyahmarshal medan datetime yang diformat dengan tidak betul dengan lancar dalam program Go. Ini membolehkan lebih fleksibiliti dalam mengendalikan data input dan memastikan perwakilan struct Go menggambarkan data dengan tepat, tanpa mengira formatnya.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Datetime yang Diformat dengan Salah dalam Go?. 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