设置json序列化不转义

func JSONMarshal(t interface{}) ([]byte, error) {
	buffer := &bytes.Buffer{}
	encoder := json.NewEncoder(buffer)
	encoder.SetEscapeHTML(false)
	err := encoder.Encode(t)
	return buffer.Bytes(), err
}

 

强制替换\u0026

func TransHtmlJson(data []byte) []byte {
	data = bytes.Replace(data, []byte("\\u0026"), []byte("&"), -1)
	data = bytes.Replace(data, []byte("\\u003c"), []byte("<"), -1)
	data = bytes.Replace(data, []byte("\\u003e"), []byte(">"), -1)
	return data
}

 

curl命令不会对\u0026转义

$ curl -s "http://127.0.0.1:8090/test"

["http://www.baidu.com?a=1\u0026b=2"]

 

浏览器json插件会转义

[ "http://www.baidu.com?a=1&b=2" ]

 

postman不会转义

["http://www.baidu.com?a=1\u0026b=2"]

 

若要在Marshal之后手动转义,必须Marshal一次,TransHtmlJson一次。

TransHtmlJson只适用于 \u0026 替换,不适用于 \\u0026 或 \\\u0026 等形式。

 

例如

["http://www.baidu.com?a=1\u0026b=2"]

执行TransHtmlJson后得到 ["http://www.baidu.com?a=1&b=2"]

正确

 

["[\"http://www.baidu.com?a=1\\u0026b=2\"]"]

执行TransHtmlJson后得到 ["[\"http://www.baidu.com?a=1\&b=2\"]"]

错误, &符号前面多了一个\