首頁 > 後端開發 > Golang > 如何在 Go 中序列化和反序列化異構 JSON 數組?

如何在 Go 中序列化和反序列化異構 JSON 數組?

Patricia Arquette
發布: 2024-12-11 14:57:10
原創
461 人瀏覽過

How to Serialize and Deserialize Heterogeneous JSON Arrays in Go?

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

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