在 Go 中序列化异构 JSON 数组
在 Go 中序列化异构 JSON 数组(包含字符串、数字和 unicode 字符的混合)由于该语言禁止混合类型切片,因此提出了挑战。考虑以下所需的 JSON 结构:
{ results: [ ["ooid1", 2.0, "Söme text"], ["ooid2", 1.3, "Åther text"], ] }
使用 Marshaler 接口进行序列化
要自定义序列化,我们可以为 Row 类型实现 json.Marshaler 接口。我们将使用interface{}的中间切片来编码异构值:
package main import ( "encoding/json" "fmt" ) 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 方法将 Row 转换为混合类型的数组。
使用 Unmarshaler 接口进行反序列化
我们可以类似地实现 json.Unmarshaler 接口解构异构值:
func (r *Row) UnmarshalJSON(bs []byte) error { arr := []interface{}{} json.Unmarshal(bs, &arr) r.Ooid = arr[0].(string) r.Score = arr[1].(float64) r.Text = arr[2].(string) return nil }
此方法将 JSON 字节转换回我们的 Row 结构。
以上是如何在 Go 中序列化和反序列化异构 JSON 数组?的详细内容。更多信息请关注PHP中文网其他相关文章!