Bagaimana untuk Meratakan Struktur JSON Bersarang dalam Go Menggunakan Fungsi UnmarshalJSON Tersuai?

Susan Sarandon
Lepaskan: 2024-10-27 08:04:02
asal
560 orang telah melayarinya

How to Flatten Nested JSON Structures in Go Using Custom UnmarshalJSON Functions?

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

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

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!

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!