將[]byte 編組為JSON:解碼奧秘
當嘗試將位元組切片([]byte) 編組為JSON 格式時,輸出時常會遇到奇怪的編碼字串。為了深入研究這種特殊的行為,讓我們檢查問題中提供的程式碼範例:
type ColorGroup struct { ByteSlice []byte SingleByte byte IntSlice []int } ... b, err := json.Marshal(group)
JSON 編組過程將 Go 資料結構轉換為其 JSON 表示形式。了解在此轉換期間如何處理 []byte 至關重要。根據json.Marshal 的Go 文檔,「[]byte 編碼為Base64 編碼的字符串。」
編碼Enigma
這意味著當您嘗試將[] byte 編組為JSON,該切片不會直接作為陣列包含在JSON 輸出中。相反,它會轉換為 Base64 編碼的字串。採用此轉換是因為 JSON 沒有原生位元組切片類型。
解碼編碼字串
要將編碼字串解碼回其原始位元組切片,您可以使用Go的base64套件。它的外觀如下:
import ( "encoding/base64" "log" ) ... b64 := "AAAAAQID" // encoded byte slice from JSON b, err := base64.StdEncoding.DecodeString(b64) if err != nil { log.Fatal(err) } fmt.Printf("%v", b) // Outputs: [0 0 0 1 2 3]
為什麼是奇怪的字串?
您遇到的編碼字串是 Base64 編碼過程的結果。 Base64 編碼將二進位資料替換為 ASCII 字元的子集,使其適合以 JSON 等非二進位格式傳輸或儲存。對於位元組切片,此編碼將位元組值轉換為字串表示形式。
以上是為什麼 Go []byte 的 JSON 封送處理會產生 Base64 編碼的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!