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

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

Barbara Streisand
發布: 2024-12-10 13:38:10
原創
899 人瀏覽過

How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板