首页 >后端开发 >Golang >如何在 Go 中实现 JSON 编组而不需要 HTML 转义?

如何在 Go 中实现 JSON 编组而不需要 HTML 转义?

Barbara Streisand
Barbara Streisand原创
2024-12-10 07:27:08394浏览

How to Achieve JSON Marshalling without HTML Escaping in Go?

无需 HTML 转义的 JSON 编组

序列化 JSON 数据时,通常需要排除 HTML 实体编码以确保准确表示字符,例如

和 >。

json.Marshal 的默认行为不支持可自定义的转义选项。但是,通过引入自定义 Marshaler 实现,我们可以覆盖此行为。

自定义 Marshaler

func (t *Track) MarshalJSON() ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}
为您的结构实现自定义 MarshalJSON 方法:

此实现在 JSON 编码器中将 EscapeHTML 设置为 false,防止 HTML 实体转义。

通用解决方案

func JSONMarshal(t interface{}) ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}
对于更通用的方法,定义一个将自定义封送处理应用于任意结构的函数:

此可重用函数可用于避免任何需要它的结构的 HTML 转义.

用法示例

要使用其中一种方法,只需调用 JSON() 或JSONMarshal() 在您的目标结构类型上,并根据需要处理生成的字节切片。

请记住,此解决方法仅在您完全控制要序列化的数据时才适用。如果涉及外部代码或第三方库,则必须确保与其预期的转义行为兼容。

以上是如何在 Go 中实现 JSON 编组而不需要 HTML 转义?的详细内容。更多信息请关注PHP中文网其他相关文章!

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