Go 中,json.Marshal 括號 自動轉義尖號(
考慮以下範例:
package main import ( "fmt" "encoding/json" ) 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 {xmlRequest:<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
注意XML 請求字串中的尖括號和& 符號在JSON 中進行轉義
在Go 1.7之前,無法阻止 json.Marshal 轉義這些字元。不過,現在有一個解決方法:
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 編碼器。然後,它將 EscapeHTML 選項設為 false,以防止編碼器轉義 HTML 字符,包括尖括號和與號。
如果您想將此解決方案應用於您自己的自訂類型,請將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 }
現在,您可以使用JSONMarshal 來編組任何自訂類型並防止尖括號和& 符號。
以上是如何防止 JSON Marshal 在 Go 中轉義尖括號和 & 符號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!