golang的json.NewEncoder特殊html字符被转义的解决方法

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 = "XML"
    fmt.Println("Before Marshal", message)
    messageJSON, _ := message.JSON()
    fmt.Println("After marshal", string(messageJSON))
}

你可能感兴趣的:(golang的json.NewEncoder特殊html字符被转义的解决方法)