首頁 >後端開發 >Golang >如何阻止 Go 的 JSON 封送拆收器將 \'&\' 轉換為 \'&\'?

如何阻止 Go 的 JSON 封送拆收器將 \'&\' 轉換為 \'&\'?

DDD
DDD原創
2024-12-01 13:09:11994瀏覽

How to Stop Go's JSON Marshaler from Converting '&' to '&'?

如何防止 JSON 將 '&' 轉換為 '&'?

問題場景

考慮以下代碼片段:

包主<p>導入(</p><pre class="brush:php;toolbar:false">"encoding/json"
"fmt"
"log"
"net/http"

)

func testFunc(w http.ResponseWriter, r *http.Request) {

data := make(map[string]string)
data["key"] = "&"
bytes, err := json.Marshal(data)
if err != nil {
    fmt.Fprintln(w, "generator json error")
} else {
    //print console
    fmt.Println(string(bytes))
    fmt.Println("&")
    //print broswer
    fmt.Fprintln(w, string(bytes))
    fmt.Fprintln(w, "&")
}

}

func main () {

http.HandleFunc("/", testFunc)
err := http.ListenAndServe(":9090", nil)
if err != nil {
    log.Fatal("ListenAndServe", err)
}

}

執行此程式碼後,我們注意到與符號('&') 被轉換為&在瀏覽器和控制台輸出中,儘管其預期顯示為“&”。

解決方案

在Go 1.7 中,引入了一個新選項來解決此問題:

func (*Encoder) SetEscapeHTML

此函數允許我們停用HTML 實體的轉義,包括'&'、''。

為了在範例程式碼中實作此解決方案,我們將 testFunc 函數修改如下:

func testFunc(w http.ResponseWriter, r *http.要求) {<pre class="brush:php;toolbar:false">...

enc := json.NewEncoder(w)
enc.SetEscapeHTML(false)

...

}

透過停用編碼器的HTML 轉義,我們確保& 字元在JSON 輸出中保留為'&',在瀏覽器和控制台中都可以。

以上是如何阻止 Go 的 JSON 封送拆收器將 \'&\' 轉換為 \'&\'?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn