一尘不染

编组json.RawMessage返回base64编码的字符串

go

我运行以下代码:

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))  
}

游乐场: http
//play.golang.org/p/qbkEIZRTPQ

输出:

"eyJmb28iOiJiYXIifQ=="

所需的输出:

{"foo":"bar"}

为什么base64编码它RawMessage就像普通的一样[]byte

毕竟,RawMessage的MarshalJSON实现只是返回字节片

// MarshalJSON returns *m as the JSON encoding of m.
func (m *RawMessage) MarshalJSON() ([]byte, error) {
    return *m, nil 
}

阅读 331

收藏
2020-07-02

共1个答案

一尘不染

螺母中找到答案

传递给的值json.Marshal必须是json.RawMessage正常工作的指针:

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))  
}
2020-07-02