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

时间:2014-06-15 11:37:24

标签: json 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 
}

1 个答案:

答案 0 :(得分:42)

go-nuts thread

中找到答案

传递给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))  
}