在Go

时间:2016-04-07 01:20:48

标签: 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))
}

这会产生以下输出:

Hello [72 101 108 108 111]
{"Content":"SGVsbG8="}

json.Marshal()方法对[]字节编码字符串执行何种转换。如何使用字符串{“Content”:“Hello”}的原始内容生成JSON?

2 个答案:

答案 0 :(得分:8)

[]byte编组为base64编码的字符串。来自documentation

  

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

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

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

答案 1 :(得分:2)

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

如果使用json.RawMessage(内部为[] byte)作为类型而不是[]byte,则封送处理将按预期方式工作到Json字符串中。