首頁 > 後端開發 > Golang > 如何繞過 Go 的 json.Marshal 中的 HTML 字元轉義?

如何繞過 Go 的 json.Marshal 中的 HTML 字元轉義?

Linda Hamilton
發布: 2024-12-11 14:01:10
原創
887 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板