Bagaimana untuk Menyahmarshal JSON dengan Kekunci Dinamik ke dalam Struct Fields dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-16 00:07:03
asal
518 orang telah melayarinya

How to Unmarshal JSON with Dynamic Keys into Struct Fields in Go?

Nyahmarshalling Kekunci Dinamik ke dalam Struct Fields in Go

Apabila bekerja dengan data JSON yang tidak mematuhi struktur yang telah ditetapkan, unmarshalling menjadi lebih mencabar. Dalam kes ini, anda mempunyai fail konfigurasi JSON dengan kekunci dinamik dalam objek bernama "benda".

Untuk menangani perkara ini, satu penyelesaian ialah menggunakan peta dalam struct anda untuk menangkap kekunci dinamik. Berikut ialah contoh:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
Salin selepas log masuk

Daripada mentakrifkan medan struktur khusus untuk setiap kekunci, medan "Perkara" ialah peta yang menyimpan pasangan nilai kunci, dengan kuncinya ialah kunci dinamik.

Untuk menyahmarshal data JSON menggunakan pendekatan ini, anda akan melakukan sesuatu seperti:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}
Salin selepas log masuk

Ini akan nyahmarshal JSON ke dalam struct "X", dengan kekunci dinamik dipetakan kepada contoh struct yang sesuai dalam peta "Things".

Walau bagaimanapun, jika anda masih mahu mempunyai nilai kunci sebagai medan dalam struct dan bukannya sebahagian daripada kunci peta, anda boleh menggunakan pendekatan ini:

type Thing struct {
    Name string `json:"-"` // <-- add this field
    Key1 string
    Key2 string
}

...

// Update the name field after unmarshalling
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}
Salin selepas log masuk

Ini melibatkan penambahan teg "-`json" pada Medan "Nama" untuk mengabaikannya semasa unmarshalling. Selepas menyahmarshalling, gelung digunakan untuk menetapkan kekunci dinamik pada medan "Nama" bagi setiap tika struct dalam peta.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON dengan Kekunci Dinamik ke dalam Struct Fields 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