Rumah > pembangunan bahagian belakang > Golang > Bagaimana Menghilangkan Medan Masa Nilai Sifar dengan Betul dalam JSON Marshaling?

Bagaimana Menghilangkan Medan Masa Nilai Sifar dengan Betul dalam JSON Marshaling?

DDD
Lepaskan: 2024-12-27 12:19:10
asal
404 orang telah melayarinya

How to Properly Omit Zero-Value Time Fields in 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"`
}
Salin selepas log masuk

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:     "",
}
Salin selepas log masuk

Penyelesaian ini menghasilkan JSON yang diingini output:

{"Timestamp":"2015-09-18T00:00:00Z"}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan