Apabila mensiri data JSON, selalunya wajar untuk mengecualikan pengekodan entiti HTML untuk memastikan perwakilan yang tepat bagi aksara seperti < dan >.
Tingkah laku lalai json.Marshal tidak menyokong pilihan melarikan diri yang boleh disesuaikan. Walau bagaimanapun, dengan pengenalan pelaksanaan Marshaler tersuai, kami boleh mengatasi tingkah laku ini.
Laksanakan kaedah MarshalJSON tersuai untuk struct anda:
func (t *Track) MarshalJSON() ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Pelaksanaan ini menetapkan EscapeHTML kepada palsu dalam pengekod JSON, menghalang HTML melarikan diri entiti.
Untuk pendekatan yang lebih generik, tentukan fungsi yang menggunakan marshaling tersuai pada mana-mana struct arbitrary:
func JSONMarshal(t interface{}) ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Fungsi boleh guna semula ini boleh digunakan untuk elakkan HTML melarikan diri untuk mana-mana struct yang memerlukannya.
Untuk menggunakan salah satu pendekatan ini, cuma panggil JSON() atau JSONMarshal() pada jenis struct sasaran anda dan kendalikan kepingan bait yang terhasil seperti yang diperlukan.
Ingat bahawa penyelesaian ini hanya terpakai apabila anda mempunyai kawalan penuh ke atas data yang disiri. Jika kod luaran atau perpustakaan pihak ketiga terlibat, adalah penting untuk memastikan keserasian dengan gelagat melarikan diri yang dijangkakan.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai JSON Marshalling tanpa HTML Escaping dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!