我有一个 struct ,其中包含作为[]字节字段的字符串,我想将其编码到JSON中.但是,生成的JSON包含片内容的非预期字符串表示.下面是我所指的一个例子:

package main

import (
    "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()方法对[]字节编码的字符串执行什么类型的转换.如何使用字符串的原始内容{"content":"Hello"}生成JSON?

推荐答案

[]byte被编组为Base64编码字符串.从documentation:

数组和切片值编码为JSON数组,不同之处在于[]byte编码为base64编码的字符串,nil切片编码为空JSON对象.

这些值在解组时会被正确解码.

之所以这样做,是因为JSON没有原始字节的本机表示.有关详细说明,请参见this question.

Go相关问答推荐

Golang regexpp:获取带有右括号的单词

GORM Find(&;Room)操作使用空数据而不是实际数据填充 struct

GO错误:Tim.Time未实现driver.Valuer(缺少方法值)

为什么Slices包中的函数定义Slice参数的类型参数?

使用Digitorus/pdfsign在GO(Golang)中签署pdf文件

重新赋值变量时未清除动态类型-这是错误吗?

将这两个函数合二为一的惯用方法

Go:如何在不加载正文的情况下创建 http 代理通行证

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

Go Template if 条件

如何在 `hashicorp / terraform-exec` 中将 `ApplyConfig` 传递给 `tf.Apply()`?

Golang - POST 失败(NoSurf CSRF)

如果值为 false,gRPC 不返回布尔值

接受通道和切片的通用函数

为什么 0 big.Int 的 .Bytes() 值是空切片?

go 是否对 struct 使用空间填充之类的东西?

即使一个测试用例失败,如何运行所有测试用例

vs 代码调试 go 测试不通过标志

使用 delve 在容器中调试 Golang:container_linux.go:380:启动容器进程导致:exec:/dlv:stat /dlv:没有这样的文件或目录

如何断言类型是指向golang中接口的指针