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.
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.
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) }
Menjalankan kod ini menghasilkan output berikut:
{"ByteSlice":"AAAAAQID"}
AAAAAQID "rentetan pelik" ialah perwakilan berkod base64 bagi hirisan bait [0 0 0 1 2 3].
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) }
Output:
[0 0 0 1 2 3]
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!