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

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

Patricia Arquette
Patricia Arquette原創
2024-12-11 14:57:10463瀏覽

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

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