>  기사  >  백엔드 개발  >  Go JSON 인코딩에서 []byte 필드를 문자열로 마샬링하는 방법은 무엇입니까?

Go JSON 인코딩에서 []byte 필드를 문자열로 마샬링하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-07 03:29:02954검색

How to Marshal a []byte Field as a String in Go JSON Encoding?

Go에서 JSON []byte를 문자열로 마샬링

[]byte 필드가 포함된 구조체를 JSON으로 인코딩할 때 예기치 않은 문자열 표현이 발생할 수 있습니다. 결과. 이 인코딩에서 []byte 필드는 설명서에 명시된 대로 base64로 인코딩된 문자열로 마샬링됩니다.

"배열 및 슬라이스 값은 JSON 배열로 인코딩됩니다. 단, []byte는 base64-로 인코딩됩니다. 인코딩된 문자열이고 nil 슬라이스는 null JSON 개체로 인코딩됩니다."

이 동작을 설명하려면 다음 Msg 구조체를 고려하세요.

<code class="go">type Msg struct {
    Content []byte
}</code>

다음 예에서 문자열 "Hello "는 []바이트 슬라이스 helloSlc로 변환되어 obj Msg 객체의 Content 필드에 할당됩니다.

<code class="go">helloStr := "Hello"
helloSlc := []byte(helloStr)
obj := Msg{helloSlc}</code>

json.Marshal을 사용하여 obj를 JSON으로 인코딩하면 결과 JSON에 base64로 인코딩된 문자열이 포함됩니다. []byte 필드 표현:

<code class="go">json, _ := json.Marshal(obj)
fmt.Println(string(json))</code>

출력:

{"Content":"SGVsbG8="}

JSON 출력에서 ​​원래 문자열 값 "Hello"를 얻으려면 []byte 필드가 다음과 같아야 합니다. JSON으로 인코딩하기 전에 base64로 인코딩된 표현에서 명시적으로 디코딩됩니다. 이는 인코딩/base64 패키지를 사용하여 달성할 수 있습니다:

<code class="go">import (
    "encoding/base64"
    "encoding/json"
    "fmt"
)

type Msg struct {
    Content string
}

func main() {
    helloSlc := []byte("Hello")
    obj := Msg{string(base64.StdEncoding.EncodeToString(helloSlc))}
    json, _ := json.Marshal(obj)
    fmt.Println(string(json))
}</code>

출력:

{"Content":"Hello"}

위 내용은 Go JSON 인코딩에서 []byte 필드를 문자열로 마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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