首頁 > 後端開發 > Golang > 為什麼 Go []byte 的 JSON 封送處理會產生 Base64 編碼的字串?

為什麼 Go []byte 的 JSON 封送處理會產生 Base64 編碼的字串?

DDD
發布: 2024-12-07 02:46:15
原創
211 人瀏覽過

Why Does JSON Marshaling of a Go []byte Result in a Base64-Encoded String?

將[]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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板