当前位置:网站首页>Golang中json.Marshal避坑
Golang中json.Marshal避坑
2022-04-22 23:00:00 【cqu_jiangzhou】
1、介绍
Golang库自带了json序列化与反序列化方法,
type Marshaler
type Marshaler interface { MarshalJSON() ([]byte, error) }实现了Marshaler接口的类型可以将自身序列化为合法的json描述。
type Unmarshaler
type Unmarshaler interface { UnmarshalJSON([]byte) error }实现了Unmarshaler接口的对象可以将自身的json描述反序列化。该方法可以认为输入是合法的json字符串。如果要在方法返回后保存自身的json数据,必须进行拷贝。
2、问题描述
如果Marshaler使用不当,会存在base64编码问题,示例如下:
package main
import (
"encoding/json"
"fmt"
)
type TestData struct {
Id int
Msg string
Data interface{}
}
func main() {
data := TestData{
Id: 0,
Msg: "OK",
Data: nil,
}
m := make(map[string]interface{})
v, _ := json.Marshal(&data) //v:[]byte类型
m["result"] = v
fmt.Println("map[result]的值:", string(v))
bytes, _ := json.Marshal(&m)
fmt.Println(string(bytes))
}

现在对 eyJJZCI6MCwiTXNnIjoiT0siLCJEYXRhIjpudWxsfQ== 进行base64解码看看情况:

可以看出,
json.Marshal
对字符串 {"Id":0,"Msg":"OK","Data":null} 进行了编码。
3、解决方法
示例:
package main
import (
"encoding/json"
"fmt"
)
type TestData struct {
Id int
Msg string
Data interface{}
}
func main() {
data := TestData{
Id: 0,
Msg: "OK",
Data: nil,
}
m := make(map[string]interface{})
v, _ := json.Marshal(&data)
m["result"] = string(v) // 将[]byte 转string
fmt.Println("map[result]的值:", string(v))
bytes, _ := json.Marshal(&m)
fmt.Println(string(bytes))
}

可以看出,通过将 []byte 类型的 v 转化为string,
json.Marshal
就不会对内容进行base64编码了。
版权声明
本文为[cqu_jiangzhou]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_42117918/article/details/124351363
边栏推荐
- Quantitative-c language implementation of equivalent domino pairs
- 阿里云服务器如何隐藏真实ip
- [BJDCTF2020]Easy MD5
- 常用搜索引擎及语法
- L1-074 两小时学完C语言 (5 分)
- 《动态规划入门》刷题笔记(更新中)
- Introduction to padding in packet encryption (pkcs1padding / pkcs5padding / iso10126padding)
- GDB调试程序的核心技术-ptrace系统调用与使用示例
- 如何看待、快手、知乎等平台将上线显示用户IP属地功能?
- bullwhip effect
猜你喜欢
随机推荐
Vtkvertex vertex
Flutter 一文搞定图片选择和图片上传
【Vmware】Vmware ESXI 6.7 安装
Rasa's new training method of Rasa
数值类型和数列类型
Codeforces Round #784 (Div. 4)
KunlunDB对MySQL私有DML语法的支持
【论文代码复现】Translating Embeddings for Modeling Multi-relational Data中TransE代码实现+遇到的错误
News Express I mobtech passed the "special safety evaluation" of China Academy of information and communications
[HCTF 2018]admin之Flask之session伪造
记录使用PageHelper时,使用Example添加排序失效问题
Principle of leftmost matching principle
Redis部署
Day81(动态规划、十叉树遍历)
Numeric type and sequence type
Multi thread thread communication (wait notify, await single, park unpark)
企业微信扫码登录后台管理系统,如何修改二维码样式
Study notes 2-0417
Must brush the simulation question bank and answers of operators of the latest fire-fighting facilities in Jiangxi in 2022
Quantitative-c language implementation of equivalent domino pairs








