最近在做websocket的时候,因为实时保存文档,文档中含有特殊字符造成编译出错: son: invalid use of ,string struct tag, trying to unmarshal “PHA+YXNkc2FkYXNk YXNkYXNkYXNkYXNkYXNkYXNkPC9wPg==” into string

    后来查了文档发现: json的Encoder只能编码到实现了io.Writer接口的对象中去,而本例中需要编码到一个[]byte切片中。

    查找资料发现bytes.Buffer对象实现了io.Writer接口。所以最终代码如下:

    1. func BuildJson(data map[string]interface{}) ([]byte, error) {
    2. buf := bytes.NewBufferString("")
    3. encoder := json.NewEncoder(buf)
    4. encoder.SetEscapeHTML(false)
    5. if err := encoder.Encode(&data); err != nil {
    6. return nil, err
    7. } else {
    8. return buf.Bytes(), nil
    9. }
    10. }