一尘不染

将JSON [] byte封送为Go中的字符串

go

我有一个结构,其中包含要编码为JSON的字符串作为[] byte字段。但是,生成的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()方法对[]
byte编码的字符串执行哪种转换。如何生成带有字符串{“ Content”:“ Hello”}的原始内容的JSON?


阅读 159

收藏
2020-07-02

共1个答案

一尘不染

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

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

取消编组时,这些值将正确解码。

这样做的原因是JSON没有原始字节的本地表示。

2020-07-02