克服編碼障礙:抑制
和> json.Marshal中的轉義簡介
在處理JSON格式的資料時,有時需要保留某些字符,例如
和>,作為編碼字串的一部分。然而,json.Marshal(用於將物件轉換為 JSON 字串的預設 Go 庫函數)會自動轉義這些字元以防止潛在的安全漏洞。當資料包含依賴這些字元的 HTML 或 XML 程式碼時,這可能會出現問題。package main import ( "encoding/json" "fmt" ) type Track struct { XmlRequest string `json:"xmlRequest"` } func main() { track := new(Track) track.XmlRequest = "<car><mirror>XML</mirror></car>" trackJSON, _ := json.Marshal(track) fmt.Println("After Marshal:", string(trackJSON)) }
{"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
{"xmlRequest":"<car><mirror>XML</mirror></car>"}
所需的JSON 字串為:
func (t *Track) JSON() ([]byte, error) { buffer := new(bytes.Buffer) encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) if err := encoder.Encode(t); err != nil { return nil, err } return buffer.Bytes(), nil }
trackJSON, err := track.JSON()
func JSONMarshal(v interface{}) ([]byte, error) { buffer := new(bytes.Buffer) encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) if err := encoder.Encode(v); err != nil { return nil, err } return buffer.Bytes(), nil }
以上是如何在 Go 中的 JSON 封送過程中防止 `` 轉義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!