Maison >développement back-end >Golang >Comment empêcher le Marshaler JSON de Go de convertir \'&\' en \'&\' ?

Comment empêcher le Marshaler JSON de Go de convertir \'&\' en \'&\' ?

DDD
DDDoriginal
2024-12-01 13:09:11994parcourir

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

Comment empêcher JSON de convertir '&' en '&' ?

Scénario de problème

Considérez l'extrait de code suivant :

package principal</p>
<p>importation (</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)
}

}

Lors de l'exécution de ce code, nous remarquons que l'esperluette ('&') est convertie en & dans la sortie du navigateur et de la console, malgré son affichage prévu sous la forme « & ».

Solution

Dans Go 1.7, une nouvelle option a été introduite pour résoudre ce problème :

func (*Encoder) SetEscapeHTML

Cette fonction nous permet de désactiver l'échappement des entités HTML, notamment '&', '<' et '>'.

Pour implémenter cette solution dans l'exemple de code, nous modifions la fonction testFunc comme suit :

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

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

...

}

En désactivant l'échappement HTML pour l'encodeur, nous nous assurons que le caractère esperluette est conservé sous la forme '&' dans la sortie JSON, à la fois dans le navigateur et dans la console.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn