在Go 中序列化混合型別JSON 陣列
在Go 中,將字串、浮點數和unicode 字元的異質數組序列化為由於缺乏對混合類型數組的內建支持,JSON 數組可能看起來具有挑戰性。但是,透過實作 json.Marshaler 接口,我們可以自訂物件的序列化方式來實現此目的。
實作 MarshalJSON 方法
將像 Row 這樣的結構序列化為數組的數組,我們在 Row 類型上建立一個 MarshalJSON 方法。此方法將Row 結構體轉換為通用介面值數組,然後使用json.Marshal 序列化它們:
func (r *Row) MarshalJSON() ([]byte, error) { arr := []interface{}{r.Ooid, r.Score, r.Text} return json.Marshal(arr) }
範例用法
中的地方,我們可以將Row 元素的切片序列化為有效的JSON array:
rows := []Row{{"ooid1", 2.0, "Söme text"}, {"ooid2", 1.3, "Åther text"}} marshalled, _ := json.Marshal(rows) // Output: // {"results": [["ooid1", 2.0, "Söme text"], ["ooid2", 1.3, "Åther text"]]}
從 JSON 解組
如果需要,我們也可以實作 json.Unmarshaler 介面來將 JSON 資料反序列化回 Row 結構。這涉及到使用接口值的中間切片來存儲從JSON 數組中提取的值的類似方法:
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 }
通過實現json.Marshaler 和json.Unmarshaler 接口,我們可以有效地序列化和反序列化Go 中的混合型別數組,使我們能夠操作具有異質元素的資料結構(如JSON)。
以上是如何在 Go 中序列化混合類型 JSON 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!