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