首页 >后端开发 >Golang >为什么编组 json.RawMessage 值会生成 Base64 编码的字符串而不是原始 JSON?

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

DDD
DDD原创
2024-11-12 04:54:01804浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn