将JSON []字节编组为Go中的字符串

prl*_*900 6 json go

我有一个包含字符串作为[]字节字段的结构,我想将其编码为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))
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

Hello [72 101 108 108 111]
{"Content":"SGVsbG8="}
Run Code Online (Sandbox Code Playgroud)

执行[]字节编码字符串的json.Marshal()方法是什么类型的转换.如何使用我的字符串{"Content":"Hello"}的原始内容生成JSON?

nem*_*emo 9

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

数组和切片值编码为JSON数组,但[]byte编码为base64编码的字符串,nil切片编码为空JSON对象.

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

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

  • 您的JSON格式正确.此行为不是错误和意图.如果你想要一个字符串表示并且只处理文本,请使用`string`而不是`[] byte`. (3认同)

sil*_*ter 5

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

如果您使用json.RawMessage(其内部是 []byte)作为类型,而不是按[]byte预期编组工作为 Json 字符串。