Rumah >pembangunan bahagian belakang >Golang >Bagaimana Menghilangkan Medan Masa Nilai Sifar dengan Betul dalam JSON Marshaling?
Menyesuaikan JSON Marshaling untuk Medan Masa dengan Tag Peninggalan
Salah satu cabaran apabila menggunakan JSON dengan medan masa ialah memastikan bahawa medan itu ditinggalkan apabila tidak ditetapkan. Walaupun menggunakan teg json:",omitempty", hasil yang diingini untuk mengecualikan masa. Medan masa dengan nilai sifar mungkin tidak berlaku.
Untuk memahami tingkah laku ini, adalah penting untuk mengenali bahawa nilai "sifar" untuk struct berbeza daripada jenis data lain. Untuk struct, nilai sifar mewakili contoh struktur yang sah di mana semua medan mengandungi nilai sifar masing-masing, menjadikannya berbeza daripada nilai kosong.
Penyelesaian kepada cabaran ini terletak pada menukar medan masa.Masa kepada penunjuk. Penunjuk sifar secara semula jadi dianggap sebagai "kosong" semasa JSON menyusun dan menyahkamar, mengelakkan isu mengabaikan medan masa bernilai sifar.
type MyStruct struct { Timestamp *time.Time `json:",omitempty"` Date *time.Time `json:",omitempty"` Field string `json:",omitempty"` }
Dengan menggunakan penunjuk untuk medan masa, kami boleh mencapai hasil yang diinginkan dengan berkesan:
ts := time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC) ms := MyStruct{ Timestamp: &ts, Field: "", }
Penyelesaian ini menghasilkan JSON yang diingini output:
{"Timestamp":"2015-09-18T00:00:00Z"}
Sebagai alternatif, jika mengubah suai struct untuk menggunakan penunjuk adalah tidak diingini, melaksanakan antara muka Marshaler dan Unmarshaler tersuai menyediakan jalan untuk menyesuaikan gelagat JSON marshaling dan unmarshaling untuk masa. Medan masa. Menggunakan kaedah Time.IsZero() membenarkan kawalan tepat sama ada untuk mengecualikan medan masa. Masa berdasarkan nilai sifarnya.
Atas ialah kandungan terperinci Bagaimana Menghilangkan Medan Masa Nilai Sifar dengan Betul dalam JSON Marshaling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!