在Go 中序列化混合類型JSON 數組
在Go 中序列化混合類型JSON 數組,包含字串、浮點數和Unicode 字符,可以構成挑戰。雖然 Python 允許混合類型的數組,但 Go 缺乏此功能。
使用 MarshalJSON 進行序列化
為了自訂序列化,Go 提供了 json.Marshaler 介面。透過實現這個接口,我們可以指定我們的結構體 Row 應該如何編碼。在本例中,我們希望將其編碼為異構值數組。
type Row struct { Ooid string Score float64 Text string } func (r *Row) MarshalJSON() ([]byte, error) { arr := []interface{}{r.Ooid, r.Score, r.Text} return json.Marshal(arr) }
MarshalJSON 採用interface{} 的中間切片來編碼混合值並傳回編碼後的 JSON 位元組。
使用 UnmarshalJSON 反序列化
從 JSON 位元組反序列化回對於結構體,Go 提供了 json.Unmarshaler 介面。
func (r *Row) UnmarshalJSON(bs []byte) error { arr := []interface{}{} json.Unmarshal(bs, &arr) // TODO: add error handling here. r.Ooid = arr[0].(string) r.Score = arr[1].(float64) r.Text = arr[2].(string) return nil }
UnmarshalJSON 使用類似的interface{} 中間切片來解碼 JSON 值並填滿 Row 結構體。
透過實現這些接口,我們獲得了對序列化和反序列化過程的控制,使我們能夠在 Go 中使用混合類型數組。
以上是如何在 Go 中序列化和反序列化混合類型 JSON 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!