首頁 >後端開發 >Golang >如何在 Go 中序列化混合類型 JSON 陣列?

如何在 Go 中序列化混合類型 JSON 陣列?

Linda Hamilton
Linda Hamilton原創
2024-12-11 09:29:10123瀏覽

How to Serialize a Mixed-Type JSON Array in Go?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn