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

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

Patricia Arquette
發布: 2024-12-07 07:01:12
原創
257 人瀏覽過

How to Serialize Mixed-Type JSON Arrays in Go?

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

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