Я запускаю следующий код:
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
}