首页  >  文章  >  后端开发  >  为什么 json.Marshal 将 json.RawMessage 编码为 Base64?

为什么 json.Marshal 将 json.RawMessage 编码为 Base64?

DDD
DDD原创
2024-11-08 21:40:02911浏览

Why Does json.Marshal Encode json.RawMessage as Base64?

编组 json.RawMessage:解密 Base64 编码

在尝试编组 json.RawMessage 对象时,您可能会遇到意外的 Base64 编码字符串作为输出而不是所需的 JSON 字符串。为了阐明这种行为,让我们深入研究一下底层概念。

json.RawMessage,顾名思义,旨在将原始 JSON 数据作为字节切片进行处理。当您尝试使用 json.Marshal 封送 RawMessage 时,默认行为是将其编码为常规 [] 字节。这导致了您观察到的 Base64 编码。

为了克服这个问题,解决方案是将指向 RawMessage 的指针传递给 json.Marshal。这是因为负责编组过程的 RawMessage 的 MarshalJSON 方法需要一个指针作为其参数。如果没有指针,它无法按预期正确返回字节切片。

通过修改代码以传递指针,如下所示,您将检索预期的 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"}

以上是为什么 json.Marshal 将 json.RawMessage 编码为 Base64?的详细内容。更多信息请关注PHP中文网其他相关文章!

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