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 중국어 웹사이트의 기타 관련 기사를 참조하세요!