我有一个结构,其中包含要编码为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?
将A []byte编组为base64编码的字符串。从文档中:
[]byte
数组和切片值编码为JSON数组,但将其[]byte编码为base64编码的字符串,而将nil slice编码为空JSON对象。
取消编组时,这些值将正确解码。
这样做的原因是JSON没有原始字节的本地表示。