首页 > 后端开发 > Golang > 正文

为什么编组 json.RawMessage 值会生成 Base64 编码的字符串而不是原始 JSON?

DDD
发布: 2024-11-12 04:54:01
原创
753 人浏览过

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

编组 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板