Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengendalikan Objek JSON Bersarang sebagai Rentetan atau Bait dalam Go?

Bagaimana untuk Mengendalikan Objek JSON Bersarang sebagai Rentetan atau Bait dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-29 07:15:11
asal
557 orang telah melayarinya

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

Marshaling Nested JSON Objects as Strings or Bytes

Apabila Menyahmarshall data JSON, selalunya wajar untuk menganggap objek bersarang sebagai nilai legap, dan bukannya menghuraikannya ke dalam jenis Go. Ini boleh dicapai menggunakan jenis RawMessage yang disediakan oleh pakej pengekodan/json.

Masalah

Pertimbangkan struct JSON dan Go berikut:

{
  "id": 15,
  "foo": { "foo": 123, "bar": "baz" }
}
Salin selepas log masuk
type Bar struct {
  Id int64
  Foo []byte
}
Salin selepas log masuk

Percubaan untuk Unmarshal JSON ini ke dalam struct Bar menghasilkan perkara berikut ralat:

json: cannot unmarshal object into Go value of type []uint8
Salin selepas log masuk

Penyelesaian

Untuk mengekalkan objek bersarang sebagai rentetan atau kepingan bait, gunakan jenis RawMessage:

type Bar struct {
  Id int64
  Foo json.RawMessage
}
Salin selepas log masuk

Seperti yang diterangkan dalam dokumentasi , RawMessage ialah objek JSON yang dikodkan mentah yang melaksanakan kedua-dua Marshaler dan Unmarshaler antara muka.

Contoh

Berikut ialah contoh yang berfungsi:

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)
}
Salin selepas log masuk

Output:

{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]}
Salin selepas log masuk

Taman Permainan

[Taman Permainan pautan](https://play.golang.org/p/L2yJj2e72dS)

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Objek JSON Bersarang sebagai Rentetan atau Bait dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan