绕过 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中文网其他相关文章!