>  기사  >  백엔드 개발  >  json.RawMessage 값을 마샬링하면 원시 JSON 대신 base64로 인코딩된 문자열이 생성되는 이유는 무엇입니까?

json.RawMessage 값을 마샬링하면 원시 JSON 대신 base64로 인코딩된 문자열이 생성되는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-12 04:54:01772검색

Why does marshalling a json.RawMessage value result in a base64-encoded string instead of raw JSON?

json.RawMessage를 마샬링하면 Base64로 인코딩된 문자열이 반환됩니다.

질문:

json.RawMessage 값, 출력이 원시 JSON 대신 base64로 인코딩된 문자열인 이유는 무엇입니까?

배경:

아래 코드는 문제를 보여줍니다.

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := json.RawMessage(`{"foo":"bar"}`)
    j, err := json.Marshal(raw)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(j))  
}

예상 출력:

{"foo":"bar"}

실제 출력:

"eyJmb28iOiJiYXIifQ=="

답변:

json.RawMessage 유형의 MarshalJSON 메서드는 단순히 기본 바이트 슬라이스를 반환합니다. 그러나 json.RawMessage가 제대로 작동하려면 json.Marshal에 전달된 값이 포인터여야 합니다.

해결책:

문제를 해결하려면 코드를 업데이트하세요. 다음과 같습니다:

j, err := json.Marshal(&raw)

위 내용은 json.RawMessage 값을 마샬링하면 원시 JSON 대신 base64로 인코딩된 문자열이 생성되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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