Penyahkodan Separa dan Kemas Kini JSON dalam Go
Apabila bekerja dengan objek JSON, mungkin perlu menyahkod nilai tertentu sahaja sambil mengekalkan yang tidak diketahui bahagian objek. Pakej pengekodan/json dalam Go, bagaimanapun, cenderung untuk memotong medan yang tidak terdapat dalam struct, yang membawa kepada kehilangan data apabila pengekodan semula.
A Penyelesaian
Kepada mengatasi masalah ini, gabungan struct mudah dan json.RawMessage boleh digunakan untuk mengekalkan yang tidak diketahui medan.
type Color struct { Space string raw map[string]json.RawMessage }
Dalam struct ini, medan mentah menyimpan keseluruhan objek JSON sebagai RawMessage. Apabila menyahkod, kaedah UnmarshalJSON membaca medan mentah untuk mengekstrak nilai tertentu ke dalam medan yang ditentukan struct.
func (c *Color) UnmarshalJSON(bytes []byte) error { if err := json.Unmarshal(bytes, &c.raw); err != nil { return err } if space, ok := c.raw["Space"]; ok { if err := json.Unmarshal(space, &c.Space); err != nil { return err } } return nil }
Begitu juga, apabila pengekodan, kaedah MarshalJSON menyerikan medan Angkasa dan mengemas kini peta mentah dengan bait yang dikodkan .
func (c *Color) MarshalJSON() ([]byte, error) { bytes, err := json.Marshal(c.Space) if err != nil { return nil, err } c.raw["Space"] = json.RawMessage(bytes) return json.Marshal(c.raw) }
Pendekatan ini membenarkan penyahkodan separa dan pengemaskinian medan tertentu, sementara mengekalkan bahagian objek JSON yang tidak diketahui.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahkod Separa dan Mengemas kini JSON dalam Go Semasa Memelihara Medan Tidak Diketahui?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!