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

本文解决Go语言中使用JSON Encoder时,特殊HTML字符如'<'、'>'、'&'被转义为Unicode码的问题。通过调用SetEscapeHTML(false)方法,可避免字符串在JSON中被转换,确保数据完整性和安全性。

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))
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值