首页  >  文章  >  后端开发  >  如何在 Go JSON 编码中处理二进制数据?

如何在 Go JSON 编码中处理二进制数据?

Patricia Arquette
Patricia Arquette原创
2024-11-05 17:30:02350浏览

How to Handle Binary Data in Go JSON Encoding?

使用 Go 在 JSON 中编码 []byte 字符串

问题:二进制数据的意外 JSON 编码

在 Go 中,[]byte 切片存储原始二进制数据。当尝试使用 json.Marshal() 将包含 []byte 字段的结构编码为 JSON 时,生成的 JSON 包含切片内容的意外字符串表示形式,而不是原始二进制数据。例如:

<code class="go">type Msg struct {
    Content []byte
}

func main() {
    msg := Msg{[]byte("Hello")}
    json, _ := json.Marshal(msg)
    fmt.Println(string(json)) // Prints {"Content":"SGVsbG8="}
}</code>

Base64 编码的原因

json.Marshal() 将 []byte 切片编码为 Base64 编码的字符串,因为 JSON 没有原始字节的本机表示。 Base64 编码使用一系列可打印的 ASCII 字符来表示二进制数据。

解决方案:恢复原始二进制数据

要从 JSON 中的 Base64 编码字符串中检索原始二进制数据,只需解码使用 base64.StdEncoding.DecodeString 函数的字符串:

<code class="go">import "encoding/base64"

func main() {
    ...
    decodedBytes, _ := base64.StdEncoding.DecodeString(msg.Content)
    fmt.Println(string(decodedBytes)) // Prints "Hello"
}</code>

以上是如何在 Go JSON 编码中处理二进制数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

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