Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencegah JSON Melarikan diri daripada '' dalam `json.Marshal` Go?

Bagaimana untuk Mencegah JSON Melarikan diri daripada '' dalam `json.Marshal` Go?

Linda Hamilton
Lepaskan: 2024-12-16 08:41:13
asal
228 orang telah melayarinya

How to Prevent JSON Escaping of

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))
}
Salin selepas log masuk

Output:

Before Marshal {<car><mirror>XML</mirror></car>}
After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
Salin selepas log masuk

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
}
Salin selepas log masuk

Dengan memanggil fungsi ini dan bukannya json.Marshal, anda boleh menghalang "<" melarikan diri. dan ">".

Output:

{"xmlRequest":"<car><mirror>XML</mirror></car>"}
Salin selepas log masuk

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!

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