在 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中文网其他相关文章!