golang JSON编码时保留HTML标签

2018年3月1日 · 41 字 · 1 分钟

golang默认编码JSON时会将HTML标签中的尖括号编码为\u003c这种unicode字符。而最近在开发的微信客服消息推送就会出现以下结果

\u003ca href='https://www.example.com'\u003e点击进入\u003c/a\u003e

查看golang的json包发现json编码器有个方法SetEscapeHTML方法,接收一个bool值来设置是否保留HTML标签。

问题

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

解决

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

func BuildJson(data map[string]interface{}) ([]byte, error) {
    buf := bytes.NewBufferString("")
    encoder := json.NewEncoder(buf)
	encoder.SetEscapeHTML(false)
	if err := encoder.Encode(&data); err != nil {
		return nil, err
	} else {
		return buf.Bytes(), nil
	}
}

经过测试,输出接口符合要求。