Membenamkan Struct dengan Custom MarshalJSON()
Apabila membenamkan struct dengan kaedah MarshalJSON() tersuai, medan struct luar ialah dinaikkan pangkat kepada jenis digalakkan, mengatasi kaedah MarshalJSON() struct terbenam. Ini boleh membawa kepada hasil yang tidak dijangka apabila menyusun struct luar.
Masalah:
Pertimbangkan struct berikut:
type Person struct { Name string `json:"name"` } func (p *Person) MarshalJSON() ([]byte, error) { return json.Marshal(struct { Name string `json:"name"` }{ Name: strings.ToUpper(p.Name), }) } type Employee struct { *Person JobRole string `json:"jobRole"` }
Marshalling instance Pekerja menghasilkan yang tidak dijangka hasil:
p := Person{"Bob"} e := Employee{&p, "Sales"} output, _ := json.Marshal(e) fmt.Printf("%s\n", string(output))
Output:
{"name": "BOB"}
Medan Peranan pekerjaan tiada, walaupun ditetapkan pada contoh Pekerja.
Penyelesaian:
Pilihan 1: Elakkan MarshalJSON() pada Jenis Terbenam
Pilihan 2: Laksanakan MarshalJSON( ) pada Jenis Luar
Nota: Kedua-dua pilihan memerlukan beberapa pengendalian manual dan mungkin menjejaskan susunan medan dalam output JSON akhir.
Atas ialah kandungan terperinci Bagaimana dengan Betul MarshalJSON() Apabila Membenamkan Struktur dengan Kaedah MarshalJSON() Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!