Meratakan data JSON bersarang ke dalam struktur satu tahap ialah tugas biasa dalam pemprosesan data. Begini cara anda boleh mencapai ini dalam Go menggunakan fungsi UnmarshalJSON tersuai:
Fungsi UnmarshalJSON tersuai membenarkan struct Go mengendalikan penyahmarshalan data JSON. Berikut ialah struct Sosial anda yang dikemas kini dengan pelaksanaan UnmarshalJSON:
<code class="go">type Social struct { GooglePlusPlusOnes uint32 `Social:"GooglePlusOne"` TwitterTweets uint32 `json:"Twitter"` LinkedinShares uint32 `json:"LinkedIn"` PinterestPins uint32 `json:"Pinterest"` StumbleuponStumbles uint32 `json:"StumbleUpon"` DeliciousBookmarks uint32 `json:"Delicious"` // Custom unmarshalling for the Facebook fields FacebookLikes uint32 `json:"-"` FacebookShares uint32 `json:"-"` FacebookComments uint32 `json:"-"` FacebookTotal uint32 `json:"-"` } // UnmarshalJSON implements the Unmarshaler interface for custom JSON unmarshalling func (s *Social) UnmarshalJSON(data []byte) error { type FacebookAlias Facebook aux := &struct { Facebook FacebookAlias `json:"Facebook"` }{} if err := json.Unmarshal(data, aux); err != nil { return err } s.FacebookLikes = aux.Facebook.FacebookLikes s.FacebookShares = aux.Facebook.FacebookShares s.FacebookComments = aux.Facebook.FacebookComments s.FacebookTotal = aux.Facebook.FacebookTotal return nil }</code>
Dengan struct Sosial yang dikemas kini, anda kini boleh menyahmarshal dokumen JSON anda dan meratakannya:
<code class="go">package main import ( "encoding/json" "fmt" ) type Social struct { // ... (same as before) } func (s *Social) UnmarshalJSON(data []byte) error { // ... (same as before) } func main() { var jsonBlob = []byte(`[ {"StumbleUpon":0,"Reddit":0,"Facebook":{"commentsbox_count":4691,"click_count":0,"total_count":298686,"comment_count":38955,"like_count":82902,"share_count":176829},"Delicious":0,"GooglePlusOne":275234,"Buzz":0,"Twitter":7346788,"Diggs":0,"Pinterest":40982,"LinkedIn":0} ]`) var social []Social err := json.Unmarshal(jsonBlob, &social) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", social) }</code>
Kod ini akan mengeluarkan struktur JSON rata yang anda inginkan, dengan medan Facebook digabungkan ke dalam struktur Sosial peringkat atas.
Atas ialah kandungan terperinci Bagaimanakah saya boleh meratakan data JSON bersarang ke dalam struktur tahap tunggal menggunakan fungsi UnmarshalJSON tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!