我运行以下代码:
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
[]byte
毕竟,RawMessage的MarshalJSON实现只是返回字节片
// MarshalJSON returns *m as the JSON encoding of m. func (m *RawMessage) MarshalJSON() ([]byte, error) { return *m, nil }
在螺母中找到答案
传递给的值json.Marshal必须是json.RawMessage正常工作的指针:
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)) }