Rumah > pembangunan bahagian belakang > Golang > Mengapa Slice Go Byte Saya Bertukar kepada 'Strange String' Apabila Marshaled kepada JSON?

Mengapa Slice Go Byte Saya Bertukar kepada 'Strange String' Apabila Marshaled kepada JSON?

Barbara Streisand
Lepaskan: 2024-12-15 11:00:13
asal
1002 orang telah melayarinya

Why Does My Go Byte Slice Convert to a

Menyelesaikan Masalah Penukaran Byte-to-JSON: "Strange String" Ditemui

Dalam alam JSON marshaling, cuba mengubah kepingan bait ([]bait) kepada JSON selalunya menghasilkan hasil yang tidak dijangka—rentetan yang kelihatan pelik. Mari kita selidiki sebab di sebalik perkara ini dan terokai kaedah yang betul untuk penukaran JSON.

Sifat "Strange String"

Seperti yang didokumenkan dalam pustaka standard Go (https://golang. org/pkg/encoding/json/#Marshal), hirisan bait dikendalikan secara unik semasa JSON marshaling. Daripada ditukar terus kepada tatasusunan JSON, ia dikodkan menggunakan base64 untuk menghasilkan rentetan. Ini selalunya membawa kepada hasil yang mengelirukan.

Contoh Praktikal

Pertimbangkan coretan kod berikut:

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    type ColorGroup struct {
        ByteSlice []byte
    }
    group := ColorGroup{
        ByteSlice: []byte{0, 0, 0, 1, 2, 3},
    }
    b, err := json.Marshal(group)
    if err != nil {
        fmt.Println("error:", err)
    }
    os.Stdout.Write(b)
}
Salin selepas log masuk

Menjalankan kod ini menghasilkan output berikut:

{"ByteSlice":"AAAAAQID"}
Salin selepas log masuk

AAAAAQID "rentetan pelik" ialah perwakilan berkod base64 bagi hirisan bait [0 0 0 1 2 3].

Memulihkan Kepingan Bait

Untuk mendapatkan hirisan bait asal daripada rentetan yang dikodkan, anda boleh menggunakan pakej base64 dalam Pergi:

package main

import (
    "encoding/base64"
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    type ColorGroup struct {
        ByteSlice []byte
    }
    group := ColorGroup{}

    b, err := json.Marshal(group)
    if err != nil {
        fmt.Println("error:", err)
    }
    err = json.Unmarshal(b, &group)
    if err != nil {
        fmt.Println("error:", err)
    }

    decodedBytes, err := base64.StdEncoding.DecodeString(group.ByteSlice)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Println(decodedBytes)
}
Salin selepas log masuk

Output:

[0 0 0 1 2 3]
Salin selepas log masuk

Kesimpulan

Memahami sebab hirisan bait mempamerkan gelagat ini semasa JSON marshaling adalah penting untuk mengurus data dengan berkesan. Dengan menggunakan mekanisme pengekodan dan penyahkodan base64, ia menjadi tugas mudah untuk menukar antara kepingan bait dan data JSON dengan lancar.

Atas ialah kandungan terperinci Mengapa Slice Go Byte Saya Bertukar kepada 'Strange String' Apabila Marshaled kepada JSON?. 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