编组 json.RawMessage 返回 Base64 编码的字符串
问题:
编组时json.RawMessage值,为什么输出是a base64 编码的字符串而不是原始 JSON?
背景:
下面的代码演示了该问题:
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 值会生成 Base64 编码的字符串而不是原始 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!