Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menghalang JSON Marshal daripada Melarikan Diri Kurungan Sudut dan Ampersand dalam Go?

Bagaimana untuk Menghalang JSON Marshal daripada Melarikan Diri Kurungan Sudut dan Ampersand dalam Go?

Patricia Arquette
Lepaskan: 2024-12-10 14:25:11
asal
302 orang telah melayarinya

How to Prevent JSON Marshal from Escaping Angle Brackets and Ampersands in Go?

Escaping Angle Brackets and Ampersands dalam JSON Marshal

Masalah

Dalam Go, fungsi json.Marshal secara automatik terlepas dari kurungan sudut (<, > ;) dan ampersand (&) dalam rentetan. Walau bagaimanapun, ini boleh menjadi tidak diingini dalam situasi tertentu.

Pertimbangkan contoh berikut:

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))
}</p>
<p>Kod ini akan mencetak output berikut:</p>
<pre class="brush:php;toolbar:false">Before Marshal {xmlRequest:<car><mirror>XML</mirror></car>}
After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
Salin selepas log masuk

Perhatikan bahawa kurungan sudut dan ampersand dalam rentetan permintaan XML dikeluarkan dalam JSON output.

Penyelesaian

Sebelum Go 1.7, adalah mustahil untuk menghalang json.Marshal daripada melarikan watak ini. Walau bagaimanapun, kini terdapat penyelesaian:

func (t *Track) JSON() ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}
Salin selepas log masuk

Fungsi ini mula-mula mencipta penimbal bait dan pengekod JSON. Kemudian, ia menetapkan pilihan EscapeHTML kepada palsu untuk menghalang pengekod daripada melepaskan aksara HTML, termasuk kurungan sudut dan ampersand.

Jika anda ingin menggunakan penyelesaian ini pada jenis tersuai anda sendiri, ubah suai fungsi JSON() sebagai berikut:

func JSONMarshal(t interface{}) ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}
Salin selepas log masuk

Kini, anda boleh menggunakan JSONMarshal untuk mengawal sebarang jenis tersuai dan menghalang sudut yang terlepas kurungan dan ampersand.

Atas ialah kandungan terperinci Bagaimana untuk Menghalang JSON Marshal daripada Melarikan Diri Kurungan Sudut dan Ampersand dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan