Heim >Backend-Entwicklung >Golang >Wie kann ich verhindern, dass der JSON-Marshaler von Go „&' in „&' konvertiert?

Wie kann ich verhindern, dass der JSON-Marshaler von Go „&' in „&' konvertiert?

DDD
DDDOriginal
2024-12-01 13:09:11994Durchsuche

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

Wie verhindert man, dass JSON „&“ in „&“ konvertiert?

Problemszenario

Bedenken Sie den folgenden Codeausschnitt:

package main</p>
<p>import (</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)
}

}

Beim Ausführen dieses Codes stellen wir fest, dass das kaufmännische Und-Zeichen ('&') in & umgewandelt wird. sowohl in der Browser- als auch in der Konsolenausgabe, trotz der beabsichtigten Anzeige als „&“.

Lösung

In Go 1.7 wurde eine neue Option eingeführt, um dieses Problem zu beheben:

func (*Encoder) SetEscapeHTML

Mit dieser Funktion können wir das Escapezeichen von HTML-Entitäten deaktivieren, einschließlich „&“, „<“ und '>'.

Um diese Lösung im Beispielcode zu implementieren, ändern wir die testFunc-Funktion wie folgt:

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

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

...

}

Indem wir die HTML-Escape-Funktion für den Encoder deaktivieren, stellen wir sicher, dass das kaufmännische Und-Zeichen in der JSON-Ausgabe als „&“ erhalten bleibt. sowohl im Browser als auch in der Konsole.

Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass der JSON-Marshaler von Go „&' in „&' konvertiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn