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