> 백엔드 개발 > Golang > Go []바이트의 JSON 마샬링이 Base64로 인코딩된 문자열로 나타나는 이유는 무엇입니까?

Go []바이트의 JSON 마샬링이 Base64로 인코딩된 문자열로 나타나는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-07 02:46:15
원래의
211명이 탐색했습니다.

Why Does JSON Marshaling of a Go []byte Result in a Base64-Encoded String?

[]byte를 JSON으로 마샬링: 미스터리 디코딩

바이트 슬라이스([]byte)를 JSON 형식으로 마샬링하려고 할 때, 출력으로 이상하고 인코딩된 문자열을 만나는 것이 일반적입니다. 이 독특한 동작을 자세히 알아보기 위해 질문에 제공된 코드 샘플을 살펴보겠습니다.

type ColorGroup struct {
    ByteSlice    []byte
    SingleByte   byte
    IntSlice     []int
}
...
b, err := json.Marshal(group)
로그인 후 복사

JSON 마샬링 프로세스는 Go 데이터 구조를 JSON 표현으로 변환합니다. 이 변환 중에 []byte가 처리되는 방식을 이해하는 것이 중요합니다. json.Marshal에 대한 Go 문서에 따르면 "[]바이트는 base64로 인코딩된 문자열로 인코딩됩니다."

인코딩 수수께끼

이것이 의미하는 바는 []바이트를 JSON으로 마샬링하려고 하면 슬라이스가 JSON 출력에 배열로 직접 포함되지 않습니다. 대신, base64로 인코딩된 문자열로 변환됩니다. JSON에는 기본 바이트 슬라이스 유형이 없기 때문에 이 변환이 사용됩니다.

인코딩된 문자열 디코딩

인코딩된 문자열을 원래 바이트 슬라이스로 다시 디코딩하려면 Go base64 패키지를 사용할 수 있습니다. 그 모습은 다음과 같습니다.

import (
    "encoding/base64"
    "log"
)
...
b64 := "AAAAAQID" // encoded byte slice from JSON
b, err := base64.StdEncoding.DecodeString(b64)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%v", b) // Outputs: [0 0 0 1 2 3]
로그인 후 복사

왜 문자열이 이상한가요?

인코딩된 문자열은 base64 인코딩 프로세스의 결과입니다. Base64 인코딩은 이진 데이터를 ASCII 문자의 하위 집합으로 대체하여 JSON과 같은 이진이 아닌 형식으로 전송하거나 저장하는 데 적합하게 만듭니다. 바이트 슬라이스의 경우 이 인코딩은 바이트 값을 문자열 표현으로 변환합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿