Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyahmarshal JSON dengan Cekap dengan Struktur Tatasusunan Dinamik dalam Go?

Bagaimana untuk Menyahmarshal JSON dengan Cekap dengan Struktur Tatasusunan Dinamik dalam Go?

Linda Hamilton
Lepaskan: 2024-12-21 14:43:11
asal
636 orang telah melayarinya

How to Efficiently Unmarshal JSON with Dynamic Array Structures in Go?

Menghapuskan JSON dengan Struktur Tatasusunan Dinamik

Apabila mendapatkan semula data JSON daripada sumber pihak ketiga, struktur data boleh berbeza-beza, kadangkala mengandungi tatasusunan dan kadang-kadang tidak. Ini boleh menimbulkan cabaran apabila menggunakan fungsi json.Unmarshal Go, kerana ia menjangkakan struct tertentu sepadan dengan struktur JSON.

Pendekatan biasa untuk mengendalikan perkara ini ialah mencipta struct sekunder dengan kepingan, seperti:

type ResponseWithSlice struct {
    Gwrcmds struct {
        Gwrcmd []struct { // Nested struct now a slice
            Gcmd  string
            Gdata struct {
                Gip struct {
                    Version string
                }
            }
        }
    }
}
Salin selepas log masuk

Ini berfungsi, tetapi ia melibatkan penduaan struct, yang boleh menyusahkan.

A penyelesaian yang lebih serba boleh melibatkan penggunaan json.RawMessage:

type Response struct {
    RawGwrcmd json.RawMessage `json:"gwrcmds"`
}
Salin selepas log masuk

Dengan pendekatan ini, medan gwrcmds disimpan sebagai mesej JSON mentah, membolehkan kami mengintip ke dalamnya dan menyahmarshalkannya dengan sewajarnya:

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawGwrcmd); err != nil {
        return err
    }
    if r.RawGwrcmd[0] == '[' { // Check if it's an array
        return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd)
    }
    return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd) // Otherwise, treat it as a single struct
}
Salin selepas log masuk

Kaedah ini membolehkan kami mengendalikan kedua-dua struktur tatasusunan dan bukan tatasusunan tanpa memerlukan struktur tambahan.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON dengan Cekap dengan Struktur Tatasusunan Dinamik 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