Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Membongkar Objek Bersarang JSON sebagai Tatasusunan Byte dalam Go?

Bagaimana untuk Membongkar Objek Bersarang JSON sebagai Tatasusunan Byte dalam Go?

Linda Hamilton
Lepaskan: 2024-12-02 15:13:12
asal
464 orang telah melayarinya

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

Menyahmarshall JSON Nested Objects as Strings or Byte Arrays

Apabila berurusan dengan respons JSON, mungkin perlu untuk mengekalkan objek bersarang tertentu sebagai rentetan mentah atau tatasusunan bait dan bukannya memintanya dihuraikan ke dalam struktur Go. Untuk menangani perkara ini, kami akan meneroka penyelesaian menggunakan jenis json.RawMessage daripada pengekodan/pakej json.

Dalam senario khusus anda, JSON berikut:

{
    "id"  : 15,
    "foo" : { "foo": 123, "bar": "baz" }
}
Salin selepas log masuk

hendaklah dibatalkan ke dalam struktur Go dengan medan ID jenis int64 dan medan Foo jenis []bait. Ralat yang anda temui, "json: cannot unmarshal object into Go value of type []uint8," menunjukkan bahawa proses unmarshalling sedang cuba menghuraikan objek foo ke dalam nilai Go, yang bukan tingkah laku yang dimaksudkan.

Jenis json.RawMessage menyediakan penyelesaian untuk masalah ini. Seperti yang dinyatakan oleh dokumentasinya, ia ialah "objek JSON yang dikodkan mentah" yang boleh digunakan untuk menangguhkan penyahkodan JSON atau prakiraan pengekodan JSON. Menggunakan json.RawMessage, anda boleh mengekalkan objek foo sebagai tatasusunan bait mentah dalam struktur Go anda dengan berkesan:

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)
}
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

Dengan memanfaatkan json.RawMessage, anda boleh kini berjaya Unmarshal JSON ke dalam struktur Go yang menganggap objek foo sebagai tatasusunan bait.

Atas ialah kandungan terperinci Bagaimana untuk Membongkar Objek Bersarang JSON sebagai Tatasusunan Byte 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