如何在Go 中序列化混合型別JSON 陣列
挑戰
挑戰異質資料的數組,例如字串、浮點數和unicode 的混合由於Go缺乏對數組中混合類型的支持,因此在 Go 中可能會遇到挑戰。
解決方案為了克服這個限制,我們可以利用 Go 的可自訂 JSON 序列化透過實作 json.Marshaler 和 json.Unmarshaler 介面來實現機制。透過在自訂類型上定義這些函數,我們可以控制資料的序列化和反序列化方式。
序列化(封送處理)序列化我們的混合類型資料到 JSON 陣列中,我們為自訂類型建立一個 MarshalJSON 函數。在此函數中,我們建立一個interface{}元素的中間切片,並用我們想要序列化的值填滿它。然後,我們在切片上使用 json.Marshal 函數來產生資料的 JSON 表示形式。
反序列化(解組)同樣,對於反序列化,我們建立一個UnmarshalJSON 函數。在這裡,我們首先使用 json.Unmarshal 函數將傳入的 JSON 位元組解析為 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) } func main() { rows := []Row{ {"ooid1", 2.0, "Söme text"}, {"ooid2", 1.3, "Åther text"}, } marshalled, _ := json.Marshal(rows) fmt.Println(string(marshalled)) }
以下範例示範如何序列化與反序列化混合- 模式資料結構:
結論結論透過實現json.Marshaler 和json.Unmarshaler接口,我們獲得了在 Go 中處理混合類型資料結構的靈活性。這種方法允許我們自訂序列化和反序列化過程,產生所需的 JSON 陣列格式。以上是如何在 Go 中序列化混合類型 JSON 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!