Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meratakan Struktur JSON Bersarang dalam Go Menggunakan Fungsi UnmarshalJSON Tersuai?

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

Susan Sarandon
Susan Sarandonasal
2024-10-27 08:04:02662semak imbas

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>

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!

Kenyataan:
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