Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencegah JSON Melarikan diri daripada '' dalam `json.Marshal` Go?
Mencegah JSON Melarikan diri daripada "<" dan ">" dengan json.Marshal
Apabila menggunakan json.Marshal untuk menukar struct kepada JSON, aksara khas seperti "<" dan ">" secara automatik dilarikan ke setara Unicode mereka. Walau bagaimanapun, mungkin terdapat kes di mana anda mahu aksara ini dikekalkan dalam bentuk asalnya.
Pernyataan Masalah
Pertimbangkan program Go berikut:
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)) }
Output:
Before Marshal {<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
Seperti yang anda lihat, "<" dan ">" aksara telah dilarikan ke "u003c" dan "u003e" masing-masing.
Penyelesaian
Setakat Go 1.7, json.Marshal tidak menyediakan pilihan untuk melumpuhkan HTML melarikan diri . Walau bagaimanapun, terdapat penyelesaian menggunakan fungsi tersuai:
func (t *Track) JSON() ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Dengan memanggil fungsi ini dan bukannya json.Marshal, anda boleh menghalang "<" melarikan diri. dan ">".
Output:
{"xmlRequest":"<car><mirror>XML</mirror></car>"}
Atas ialah kandungan terperinci Bagaimana untuk Mencegah JSON Melarikan diri daripada '' dalam `json.Marshal` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!