다음 코드 조각을 고려하세요.
<사전>패키지 메인
가져오기 (
"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
이 기능을 사용하면 '&', '<' 및 '>'.
예제 코드에서 이 솔루션을 구현하기 위해 testFunc 함수를 다음과 같이 수정합니다.
func testFunc(w http.ResponseWriter, r *http. 요구) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">... enc := json.NewEncoder(w) enc.SetEscapeHTML(false) ...
}
인코더에 대한 HTML 이스케이프를 비활성화하여 JSON 출력에서 앰퍼샌드 문자가 '&'로 유지되도록 합니다. 브라우저와 콘솔 모두에서.
위 내용은 Go의 JSON Marshaler가 '&'를 '&'로 변환하는 것을 중지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!