首页 > 后端开发 > Golang > 如何绕过 Go 的 json.Marshal 中的 HTML 字符转义?

如何绕过 Go 的 json.Marshal 中的 HTML 字符转义?

Linda Hamilton
发布: 2024-12-11 14:01:10
原创
890 人浏览过

How to Bypass HTML Character Escaping in Go's `json.Marshal`?

绕过 json.Marshal 中的 HTML 字符转义

Go 的 json.Marshal 函数会自动转义某些字符,包括 <和 >,以防止浏览器误解。但是,在序列化 XML 数据时,这种行为可能是不可取的,因为它会更改预期内容。

不幸的是,无法单独使用 json.Marshal 函数禁用字符转义。源代码显示字符转义被硬编码为 true,确保 始终分别转换为“u003c”和“u003e”。此限制扩展到实现自定义 MarshalJSON 方法,因为它们仍然依赖于内部 json.Marshal 实现。

为了克服此障碍,解决方法包括定义用于编组的自定义函数。以下是实现 JSON 方法的 Track 类型的修改版本:

import "bytes"
import "encoding/json"

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
}
登录后复制

通过使用此自定义 JSON 方法,您可以通过显式设置 SetEscapeHTML(false) 来控制转义行为。

如果您需要任何结构的通用解决方案,您可以定义以下函数:

import "bytes"
import "encoding/json"

func JSONMarshal(t interface{}) ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}
登录后复制

以上是如何绕过 Go 的 json.Marshal 中的 HTML 字符转义?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板