首页 >后端开发 >Golang >为什么 Go 的 `json.Marshal` 将 `[]byte` 编码为 Base64 字符串?

为什么 Go 的 `json.Marshal` 将 `[]byte` 编码为 Base64 字符串?

Patricia Arquette
Patricia Arquette原创
2024-12-10 01:23:10280浏览

Why Does Go's `json.Marshal` Encode `[]byte` as a Base64 String?

将 []byte 编组为 JSON

在 Go 中,将 []byte 编组为 JSON 与其他数据类型略有不同。 JSON 包不是直接将字节编码为数组,而是将 []byte 编码为 Base64 编码的字符串。此行为在encoding/json的文档中明确说明:

Array and slice values encode as JSON arrays, except that []byte encodes as a base64-encoded string, and a nil slice encodes as the null JSON object.

Base64编码字符串输出

在您的情况下, json.Marshal( 的输出组)包含“AAAAAQID”。这表示 []byte 切片的 Base64 编码:

originalBytes := []byte{0, 0, 0, 1, 2, 3}
encodedString := base64.StdEncoding.EncodeToString(originalBytes)

fmt.Println(encodedString) // Output: AAAAAQID

解码 Base64 数据

要从编码字符串中检索原始 []byte 值,您可以解码base64数据:

decodedBytes, err := base64.StdEncoding.DecodeString("AAAAAQID")
if err != nil {
    // Handle error
}

fmt.Println(decodedBytes) // Output: [0 0 0 1 2 3]

以上是为什么 Go 的 `json.Marshal` 将 `[]byte` 编码为 Base64 字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn