Rumah > Artikel > pembangunan bahagian belakang > Mengapakah JSON Menyahmarshaling Struktur Terbenam Membawa kepada Gelagat Tidak Dijangka?
Penerokaan struktur terbenam JSON Unmarshal
Apabila cuba menyahmarshal objek JSON ke dalam struct dengan medan terbenam, tingkah laku yang tidak dijangka boleh timbul. Untuk menggambarkan ini, pertimbangkan takrifan struct berikut:
<code class="go">type Outer struct { Inner Num int } type Inner struct { Data string } func (i *Inner) UnmarshalJSON(data []byte) error { i.Data = string(data) return nil }</code>
Menyahmarshal objek JSON ke dalam contoh Luar menggunakan json.Unmarshal(data, &Outer{}) menyebabkan hanya medan Dalaman diisi, manakala Medan num kekal tidak disentuh. Ini boleh dikaitkan dengan cara JSON menyahmarshal medan terbenam.
Untuk menyelesaikan isu ini, adalah disyorkan untuk menjadikan medan terbenam sebagai medan eksplisit dalam struct induk. Pengubahsuaian ini membolehkan pembongkar JSON mengakses dan menyahmarshal medan secara terus. Berikut ialah definisi struct yang diperbetulkan:
<code class="go">Outer struct { I Inner // make Inner an explicit field Num int `json:"Num"` }</code>
Dalam versi yang dikemas kini ini, medan Inner dijadikan medan eksplisit bernama I. Selain itu, medan Num ditag dengan json:"Num" untuk memastikan kekunci JSON "Num" memetakan ke medan ini semasa unmarshalling.
Dengan menggunakan pendekatan ini, kedua-dua medan I dan Num akan betul diisi apabila menyahmarshall objek JSON ke dalam tika Outer.
Atas ialah kandungan terperinci Mengapakah JSON Menyahmarshaling Struktur Terbenam Membawa kepada Gelagat Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!