>백엔드 개발 >Golang >Go\의 JSON Marshaler가 \'&\'를 \'&\'로 변환하는 것을 중지하는 방법은 무엇입니까?

Go\의 JSON Marshaler가 \'&\'를 \'&\'로 변환하는 것을 중지하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-01 13:09:11994검색

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

JSON이 '&'를 '&'로 변환하는 것을 방지하는 방법은 무엇입니까?

문제 시나리오

다음 코드 조각을 고려하세요.

<사전>패키지 메인

가져오기 (

"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>
<pre class="brush:php;toolbar:false">...

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

...

}

인코더에 대한 HTML 이스케이프를 비활성화하여 JSON 출력에서 ​​앰퍼샌드 문자가 '&'로 유지되도록 합니다. 브라우저와 콘솔 모두에서.

위 내용은 Go\의 JSON Marshaler가 \'&\'를 \'&\'로 변환하는 것을 중지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.