Meratakan JSON Bersarang
Menavigasi struktur JSON yang kompleks dengan berbilang peringkat sarang boleh menjadi cabaran dalam Go. Apabila menjadi perlu untuk meratakan struktur bersarang ini ke dalam format yang lebih diperkemas, penyelesaian tersuai selalunya diperlukan.
Dalam senario yang dibentangkan, tugasnya adalah untuk meratakan respons JSON yang mengandungi jenis Sosial bersarang dengan bersarang lagi jenis Facebook. Matlamatnya adalah untuk menghapuskan jenis Facebook perantaraan dan meratakan sifatnya ke dalam jenis Sosial.
Fungsi UnmarshalJSON Tersuai
Untuk mencapainya, kami boleh menggunakan kuasa fungsi UnmarshalJSON Go, yang membolehkan anda untuk menyesuaikan cara JSON dinyahkodkan menjadi struct. Begini cara melaksanakannya untuk meratakan JSON bersarang:
<code class="go">type Social struct { // ... existing properties ... FacebookLikes uint32 `json:"-"` FacebookShares uint32 `json:"-"` FacebookComments uint32 `json:"-"` FacebookTotal uint32 `json:"-"` } func (s *Social) UnmarshalJSON(data []byte) error { m := make(map[string]interface{}) if err := json.Unmarshal(data, &m); err != nil { return err } m = Flatten(m) // Extract nested Facebook properties if fbMap, ok := m["Facebook"].(map[string]interface{}); ok { s.FacebookLikes = fbMap["FacebookLikes"].(uint32) s.FacebookShares = fbMap["FacebookShares"].(uint32) s.FacebookComments = fbMap["FacebookComments"].(uint32) s.FacebookTotal = fbMap["FacebookTotal"].(uint32) } return nil }</code>
Flatten HelperFungsi
Fungsi Pembantu Flatten bertanggungjawab untuk mengalih keluar peta bersarang dan menggantikannya dengan kekunci sempadan titik:
<code class="go">func Flatten(m map[string]interface{}) map[string]interface{} { o := make(map[string]interface{}) for k, v := range m { switch child := v.(type) { case map[string]interface{}: nm := Flatten(child) for nk, nv := range nm { o[k+"."+nk] = nv } default: o[k] = v } } return o }</code>
Menggunakan pendekatan ini, jenis Facebook bersarang dialih keluar dan sifatnya diratakan ke dalam jenis Sosial, menghasilkan struktur data yang lebih ringkas dan terurus.
Atas ialah kandungan terperinci Bagaimana untuk Meratakan Struktur JSON Bersarang dalam Go Menggunakan Fungsi UnmarshalJSON Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!