解組JSON 資料時,通常希望將巢狀物件視為不透明值,而不是將它們解析為Go 類型。這可以使用encoding/json套件提供的RawMessage類型來實現。
考慮以下JSON和Go結構:
{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }
type Bar struct { Id int64 Foo []byte }
嘗試將此 JSON 解組到 Bar結構中會產生以下結果錯誤:
json: cannot unmarshal object into Go value of type []uint8
要將嵌套物件保留為字串或位元組切片,請使用RawMessage 類型:
type Bar struct { Id int64 Foo json.RawMessage }
如文檔中所述, RawMessage 是一個原始編碼的JSON 對象,它實現了Marshaler 和Unmarshaler
這是工作範例:
package main import ( "encoding/json" "fmt" ) var jsonStr = []byte(`{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }`) type Bar struct { Id int64 Foo json.RawMessage } func main() { var bar Bar if err := json.Unmarshal(jsonStr, &bar); err != nil { panic(err) } fmt.Printf("%+v", 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]}
[遊樂場連結](https://play.golang.org/p/L2yJj2e72dS)
以上是如何在 Go 中將巢狀 JSON 物件作為字串或位元組處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!