首頁 >後端開發 >Golang >如何在 Go 中將 JSON 巢狀物件解組為位元組數組?

如何在 Go 中將 JSON 巢狀物件解組為位元組數組?

Linda Hamilton
Linda Hamilton原創
2024-12-02 15:13:12412瀏覽

How to Unmarshal JSON Nested Objects as Byte Arrays in Go?

將JSON 巢狀物件解組為字串或位元組陣列

處理JSON 回應時,可能需要將某些巢狀物件保留為原始字串或位元組數組,而不是將它們解析為Go 結構。為了解決這個問題,我們將探索使用encoding/json套件中的json.RawMessage類型的解決方案。

在您的特定場景中,以下JSON:

{
    "id"  : 15,
    "foo" : { "foo": 123, "bar": "baz" }
}

將被解組轉換為具有 int64 類型的 ID 欄位和 []byte 類型的 Foo 欄位的 Go 結構。您遇到的錯誤“json: 無法將物件解組為 []uint8 類型的 Go 值”,表明解組過程正在嘗試將 foo 物件解析為 Go 值,這不是預期的行為。

json.RawMessage 類型為這個問題提供了解決方案。正如其文件所述,它是“原始編碼的 JSON 物件”,可用於延遲 JSON 解碼或預先計算 JSON 編碼。使用json.RawMessage,您可以有效地將foo 物件保留為Go 結構中的原始位元組數組:

import (
    "encoding/json"
    "fmt"
)

type Bar struct {
    ID  int64           `json:"id"`
    Foo json.RawMessage `json:"foo"`
}

func main() {
    var jsonStr = []byte(`{
    "id"  : 15,
    "foo" : { "foo": 123, "bar": "baz" }
}`)

    var bar Bar

    err := json.Unmarshal(jsonStr, &bar)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", bar)
}

輸出:

{Id:15 Foo:[123 32 34 102 111 111 34 58 32 49 50 51 44 32 34 98 97 114 34 58 32 34 98 97 122 34 32 125]}

透過利用json.RawMessage,您現在可以成功將JSON 解組為Go 結構,該結構將foo 物件視為位元組數組。

以上是如何在 Go 中將 JSON 巢狀物件解組為位元組數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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