编组json.RawMessage返回base64编码的字符串
我运行以下代码:编组json.RawMessage返回base64编码的字符串,json,go,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)) } 操场: 输出: "eyJmb28iO
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))
}
操场:
输出:
"eyJmb28iOiJiYXIifQ=="
{"foo":"bar"}
所需输出:
"eyJmb28iOiJiYXIifQ=="
{"foo":"bar"}
为什么它将我的RawMessage
编码为普通的[]字节
毕竟,RawMessage对MarshalJSON的实现只是返回字节片
// MarshalJSON returns *m as the JSON encoding of m.
func (m *RawMessage) MarshalJSON() ([]byte, error) {
return *m, nil
}
在一份报告中找到了答案
传递给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))
}
如何使用j变量中的键和值?@RockBalbao
j
是JSON编码的字符串。要访问这些值,您需要使用。