使用json.Marshal 如果字符串中含有 < > &字符会出现自动转义问题 不太符合预期输出
原始字符 | 转义后 |
& | \u0026 |
< | \u003c |
> | \u003e |
原始的json.marshal会开启EscapeHTML 解决代码如下
package main
import (
"bytes"
"encoding/json"
"fmt"
)
type Test struct {
Data string
}
func main() {
t := Test{Data: "http:// 127.0.0.1/test?name=1&age=3"}
bytes, err := json.Marshal(t)
fmt.Println(string(bytes), err)
bytes, err = JsonMarshal(t)
fmt.Println(string(bytes), err)
}
func JsonMarshal(data any) ([]byte, error) {
bf := bytes.NewBuffer([]byte{})
jsonEncoder := json.NewEncoder(bf)
jsonEncoder.SetEscapeHTML(false)
if err := jsonEncoder.Encode(data); err != nil {
return nil, err
}
return bytes.TrimSpace(bf.Bytes()), nil
}