登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-05-02 22:22:44 275浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《编组 json.RawMessage 返回 base64 编码的字符串》,本文主要会讲到golang等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我运行以下代码:

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 编码 myRawMessage好像它是一个普通的[]byte

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

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

正确答案

[在一个疯狂的线程](https://groups.google.com/forum/#!topic/Golang- Nuts/38ShOlhxAYY)中找到了答案[](https://groups.google.com/forum/#!topic/Golang- Nuts/38ShOlhxAYY)

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

终于介绍完啦!小伙伴们,这篇关于《编组 json.RawMessage 返回 base64 编码的字符串》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>