Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membongkar Struktur dengan Peta Slices ke dalam Peta Slices dalam Go?
Custom Unmarshaling a Struct into a Slices Peta
In Go, custom unmarshaling boleh digunakan apabila kelakuan lalai unmarshaling tidak mencukupi. Pertimbangkan senario berikut: struct dengan medan peta yang perlu diisi daripada objek JSON dengan kekunci dinamik.
Isu Contoh
Kod yang disediakan menunjukkan percubaan untuk menyahmarshal respons JSON ke dalam struct yang mengandungi peta struktur hirisan (Pair map[string][]Candles). Walau bagaimanapun, peta kekal kosong selepas dibongkar.
Penyelesaian: Memilih Struktur yang Lebih Ringkas
Penyelesaian yang mudah ialah menghapuskan peta dan mengubah suai struct untuk diselaraskan dengan Struktur JSON:
<code class="go">type OHLC_RESS struct { Pair []Candles `json:"XXBTZUSD"` Last int64 `json:"last"` }</code>
Custom Unmarshaler Menggunakan JSON.Unmarshaler
Sebagai alternatif, untuk mengekalkan struktur berasaskan peta, pelaksanaan tersuai antara muka json.Unmarshaler diperlukan . Pendekatan ini menyediakan kawalan sepenuhnya ke atas proses unmarshaling.
Butiran Pelaksanaan:
Coretan Kod:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode keys only. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Decode "last" element. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Decode remaining elements into Pair map. r.Pair = make(map[string][]Candles, len(obj)) for key, val := range obj { cc := []Candles{} if err := json.Unmarshal(val, &cc); err != nil { return err } r.Pair[key] = cc } return nil }</code>
Atas ialah kandungan terperinci Bagaimana untuk Membongkar Struktur dengan Peta Slices ke dalam Peta Slices dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!