我运行以下代码:
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
}
答案 0 :(得分:42)
传递给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))
}