Mengendalikan Nested Empty Structs dalam JSON Marshaling in Go
Pengenalan
Apabila menggunakan pengekodan /json pakej dalam Go for marshalling structs to JSON, the ",omitempty" tag boleh digunakan untuk mengecualikan medan kosong daripada JSON yang terhasil. Walau bagaimanapun, teg ini mungkin tidak berkelakuan seperti yang diharapkan untuk struktur bersarang.
Soalan
Pertimbangkan contoh berikut:
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ A: ColorGroup{}, } json.Marshal(group)
Dalam senario ini, output JSON hanya perlu memasukkan medan B, kerana medan A kosong. Walau bagaimanapun, output masih termasuk medan A dengan nilai kosong ({"A": {"Name": "", "Colors": null}, "B": null}).
Jawapan
Dokumentasi untuk json marshaling dalam Go menyatakan bahawa medan struct dianggap kosong jika ia ialah:
Dalam contoh yang disediakan, group.A ialah struct kosong, bukan penunjuk nil atau jenis koleksi (cth., kepingan, peta). Oleh itu, ia tidak dianggap sebagai nilai kosong oleh marshaler.
Untuk mencapai tingkah laku yang diingini, seseorang boleh menggunakan penunjuk kepada struct bersarang:
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A *ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ B: "abc", } json.Marshal(group)
Dengan pengubahsuaian ini, JSON output akan termasuk hanya medan B: {"B": "abc"}.
Nota:
Atas ialah kandungan terperinci Bagaimanakah Saya Mengendalikan Struktur Kosong Bersarang Dengan Betul Apabila Marshaling ke JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!