首页 >后端开发 >Golang >如何防止 Go 的 json.Marshal 中'”的 JSON 转义?

如何防止 Go 的 json.Marshal 中'”的 JSON 转义?

Linda Hamilton
Linda Hamilton原创
2024-12-16 08:41:13128浏览

How to Prevent JSON Escaping of

防止“<”的 JSON 转义和“>”和 json.Marshal

使用 json.Marshal 将结构体转换为 JSON 时,特殊字符如“<”和“>”自动转义为其 Unicode 等效项。但是,在某些情况下,您可能希望保留这些字符的原始形式。

问题陈述

考虑以下 Go 程序:

package main

import (
    "encoding/json"
    "fmt"
)

type Track struct {
    XmlRequest string `json:"xmlRequest"`
}

func main() {
    message := new(Track)
    message.XmlRequest = "<car><mirror>XML</mirror></car>"
    fmt.Println("Before Marshal", message)
    messageJSON, _ := json.Marshal(message)
    fmt.Println("After marshal", string(messageJSON))
}<p>输出:</p>
<pre class="brush:php;toolbar:false">Before Marshal {<car><mirror>XML</mirror></car>}
After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}

如您所见,“”字符已分别转义为“u003c”和“u003e”。

解决方案

从 Go 1.7 开始,json.Marshal 不提供禁用 HTML 转义的选项。但是,有一个使用自定义函数的解决方法:

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

通过调用此函数而不是 json.Marshal,可以防止“<”的转义和“>”。

输出:

{"xmlRequest":"<car><mirror>XML</mirror></car>"}

以上是如何防止 Go 的 json.Marshal 中'”的 JSON 转义?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn