首頁 >後端開發 >Golang >如何在 Go 中實作 JSON 編組而不需要 HTML 轉義?

如何在 Go 中實作 JSON 編組而不需要 HTML 轉義?

Barbara Streisand
Barbara Streisand原創
2024-12-10 07:27:08384瀏覽

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