我运行以下代码:

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))  
}

Playground: http://play.golang.org/p/qbkEIZRTPQ

Output:

"eyJmb28iOiJiYXIifQ=="

Desired output:

{"foo":"bar"}

为什么它对我的RawMessage进行Base64编码,就好像它是一个普通的[]byte一样?

毕竟,RawMessage的MarshalJSON实现只是返回字节片

// MarshalJSON returns *m as the JSON encoding of m.
func (m *RawMessage) MarshalJSON() ([]byte, error) {
    return *m, nil 
}

推荐答案

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))  
}

Go相关问答推荐

golang 的通用 map 功能

使用GO从RDPMC获得价值

提供的client_secret与此帐户上任何关联的SetupIntent都不匹配

";无效的复制因子;融合Kafka Go客户端

为什么 `go mod` 占用了另一个磁盘上的空间而不是我的 GOPATH?

如何在 Chi Router 的受保护路由下提供静态文件(尤其是图像)?

Go Template 动态获取变量

如何为ANTLR4目标Go调试监听器

为什么互斥量比 golang 中的通道慢?

具有未导出字段的 struct 类型之间的转换

为什么 Go 被认为是部分抢占式的?

Go 泛型:自引用接口约束

Golang:隐式 struct 匹配

使用 Golang SQL 驱动程序连接到snowflake

具有近似约束的函数值导致的实例化失败

使用 Go 读取 TOML 文件时结果为空

如何在循环中旋转图像以便在 golang 中创建 GIF?

递归数据 struct 解组在 Go Lang Protobuf 中给出错误无法解析无效的线格式数据

HTTP 重定向不呈现新页面

有没有办法在golang中映射一组对象?