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