将 []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中文网其他相关文章!