繞過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中文網其他相關文章!