首頁 > 後端開發 > Golang > 如何在 Go 中將巢狀 JSON 物件作為字串或位元組處理?

如何在 Go 中將巢狀 JSON 物件作為字串或位元組處理?

Mary-Kate Olsen
發布: 2024-11-29 07:15:11
原創
557 人瀏覽過

How to Handle Nested JSON Objects as Strings or Bytes in Go?

將巢狀JSON 物件編組為字串或位元組

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

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