防止「」和json.Marshal
使用json.Marshal 將結構體轉換為JSON時,特殊字元如“”自動轉義為其Unicode 等效項。但是,在某些情況下,您可能想要保留這些字元的原始形式。
問題陳述
考慮以下Go 程序:
package main import ( "encoding/json" "fmt" ) type Track struct { XmlRequest string `json:"xmlRequest"` } func main() { message := new(Track) message.XmlRequest = "<car><mirror>XML</mirror></car>" fmt.Println("Before Marshal", message) messageJSON, _ := json.Marshal(message) fmt.Println("After marshal", string(messageJSON)) }
輸出:
Before Marshal {<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
如您所見, “”字元已分別轉義為“u003c”和“u003e”。
解決方案
從 Go 1.7 開始,json.Marshal 不提供禁用 HTML 轉義的選項。但是,有一個使用自訂函數的解決方法:
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.Marshal,可以防止「」。
輸出:
{"xmlRequest":"<car><mirror>XML</mirror></car>"}
以上是如何防止 Go 的 json.Marshal 中「」的 JSON 轉義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!