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
Linda Hamiltonasal
2024-12-16 08:41:13128semak imbas

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))
}

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!

Kenyataan:
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