golang json.NewEncoder特殊html字符被转义的解决方法
问题
go使用json的encoder方法,发生了html字符的转化。<、>、&被转义为unicode码。
解决
查看 go的文档
// String values encode as JSON strings coerced to valid UTF-8,
// replacing invalid bytes with the Unicode replacement rune.
// So that the JSON will be safe to embed inside HTML <script> tags,
// the string is encoded using HTMLEscape,
// which replaces "<", ">", "&", U+2028, and U+2029 are escaped
// to "\u003c","\u003e", "\u0026", "\u2028", and "\u2029".
// This replacement can be disabled when using an Encoder,
// by calling SetEscapeHTML(false).
默认 escapeHtml 为true,这里通过调用SetEscapeHTML(false)设置为false
使用示例,注释中的代码放开即可
package main
import "fmt"
import "encoding/json"
import "bytes"
type Track struct {
XmlRequest string `json:"xmlRequest"`
}
func (t *Track) JSON() ([]byte, error) {
buffer := &bytes.Buffer{}
encoder := json.NewEncoder(buffer)
// encoder.SetEscapeHTML(false)
err := encoder.Encode(t)
return buffer.Bytes(), err
}
func main() {
message := Track{}
message.XmlRequest = "<car><mirror>XML</mirror></car>"
fmt.Println("Before Marshal", message)
messageJSON, _ := message.JSON()
fmt.Println("After marshal", string(messageJSON))
}
本文解决Go语言中使用JSON Encoder时,特殊HTML字符如'<'、'>'、'&'被转义为Unicode码的问题。通过调用SetEscapeHTML(false)方法,可避免字符串在JSON中被转换,确保数据完整性和安全性。

1849

被折叠的 条评论
为什么被折叠?



