为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中将 JSON []byte 编组为字符串

在 Go 中将 JSON []byte 编组为字符串

Go
慕尼黑的夜晚无繁华 2022-01-04 09:52:33
我有一个包含字符串作为 []byte 字段的结构,我想将其编码为 JSON。但是,生成的 JSON 包含切片内容的非预期字符串表示形式。这是我所指的一个例子:package mainimport (    "fmt"    "encoding/json"    )type Msg struct {    Content []byte}func main() {    helloStr := "Hello"    helloSlc := []byte(helloStr)    fmt.Println(helloStr, helloSlc)    obj := Msg{helloSlc}    json, _ := json.Marshal(obj)    fmt.Println(string(json))}这会产生以下输出:Hello [72 101 108 108 111]{"Content":"SGVsbG8="}json.Marshal()方法对 []byte 编码的字符串执行什么样的转换。如何使用字符串 {"Content":"Hello"} 的原始内容生成 JSON?
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

A[]byte被编组为 base64 编码的字符串。从文档

数组和切片值编码为 JSON 数组,除了[]byte编码为 base64 编码的字符串,而 nil 切片编码为 null JSON 对象。

这些值在解组时被正确解码。

这样做的原因是 JSON 没有原始字节的本机表示。有关详细说明,请参阅此问题


查看完整回答
反对 回复 2022-01-04
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我遇到了同样的事情,即使这是一个相当古老的问题并且已经回答,还有另一种选择。

如果您使用json.RawMessage(which internaly is a []byte) 作为类型而不是[]byte按预期方式将编组工作到 Json 字符串中。


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信