Bagaimanakah anda boleh meratakan struktur JSON bersarang dengan cekap ke dalam format satu tahap dalam Go?

Susan Sarandon
Lepaskan: 2024-10-30 19:55:03
asal
216 orang telah melayarinya

How can you efficiently flatten nested JSON structures into a single level format in Go?

Merungkai JSON Bersarang: Panduan Mudah untuk Meratakan

Mentafsir struktur JSON bersarang boleh menjadi tugas yang sukar. Dalam artikel ini, kita menyelidiki bidang meratakan hierarki data yang kompleks ini kepada format satu peringkat yang boleh diurus.

Untuk menggambarkan isu ini, mari pertimbangkan kod berikut dalam Go:

<code class="go">type Social struct {
    GooglePlusPlusOnes  uint32 `json:"GooglePlusOne"`
    TwitterTweets       uint32 `json:"Twitter"`
    LinkedinShares      uint32 `json:"LinkedIn"`
    PinterestPins       uint32 `json:"Pinterest"`
    StumbleuponStumbles uint32 `json:"StumbleUpon"`
    DeliciousBookmarks  uint32 `json:"Delicious"`
    Facebook            Facebook
}

type Facebook struct {
    FacebookLikes    uint32 `json:"like_count"`
    FacebookShares   uint32 `json:"share_count"`
    FacebookComments uint32 `json:"comment_count"`
    FacebookTotal    uint32 `json:"total_count"`
}</code>
Salin selepas log masuk

Kod ini mentakrifkan dua struktur, Sosial dan Facebook, yang mewakili data JSON dengan dua peringkat sarang. Cabarannya terletak pada meratakan struktur ini kepada satu tahap, di mana Sosial mengandungi semua data tanpa jenis Facebook bersarang.

Kuasa UnmarshalJSON

Untuk mencapai penyaringan ini , fungsi UnmarshalJSON mula dimainkan. Dengan mentakrifkan kaedah UnmarshalJSON tersuai untuk jenis Sosial, kami boleh mengawal cara medannya dihuni daripada JSON masuk.

Begini cara kami boleh melaksanakan kaedah ini:

<code class="go">func (s *Social) UnmarshalJSON(data []byte) error {
    type Alias Social

    var v Alias
    if err := json.Unmarshal(data, &v); err != nil {
        return err
    }

    *s = Social(v)

    // Flatten the Facebook fields
    s.FacebookLikes = v.Facebook.FacebookLikes
    s.FacebookShares = v.Facebook.FacebookShares
    s.FacebookComments = v.Facebook.FacebookComments
    s.FacebookTotal = v.Facebook.FacebookTotal

    return nil
}</code>
Salin selepas log masuk

Kuasa Peta

Dalam kes di mana anda hanya berurusan dengan peta, fungsi Flatten di bawah boleh meratakan struktur peta bersarang dengan berkesan:

<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>
Salin selepas log masuk

Fungsi ini meratakan secara rekursif peta, menggantikan peta bersarang dengan kekunci sempadan titik.

Kesimpulan

Meratakan JSON bersarang ialah tugas biasa dalam pelbagai senario pengaturcaraan. Dengan memanfaatkan kuasa UnmarshalJSON dan fungsi Flatten, anda boleh memudahkan pengendalian dan pemprosesan struktur JSON yang kompleks dengan berkesan. Teknik ini memperkasakan anda untuk mengekstrak dan mengakses data dengan cara yang lebih mudah dan cekap.

Atas ialah kandungan terperinci Bagaimanakah anda boleh meratakan struktur JSON bersarang dengan cekap ke dalam format satu tahap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!