【Golang】JSON Marshal Unmarshal
json.Marshal(v interface{}) ([]byte, error)
- 如果传入的v是一个 reference,则直接进行 marshal
- 如果传入的v是一个 pointer,则会将 pointer 中的内容解析,再进行marshal
json.Unmarshal(data []byte, v interface{}) error
- 如果传入的v是一个 reference,则匹配相应的字段来进行 unmarshal
- 如果传入的v是一个 pointer,则会报错:
json: Unmarshal(nil *srv.Animal)
- 因此如果期望用指针来 unmarshal
data []byte
,需要将指针指向某一空间,或者封装为结构体,并用结构体变量的指针当作 unmarshal 的入参 v,才能够正确解析 data 内容
Example
func main() {type Animal struct {Name string}type Human struct {Attr string}animal := Animal{Name: "xixi"}bs1, _ := json.Marshal(animal)fmt.Printf("\nbs1: " + string(bs1))bs2, _ := json.Marshal(&animal)fmt.Printf("\nbs2: " + string(bs2))var (resp1 Animalresp2 struct{ *Animal }resp3 Humanresp4 *Animalresp5 = &Animal{})_ = json.Unmarshal(bs1, &resp1)_ = json.Unmarshal(bs1, &resp2)fmt.Printf("\nresp1: %#v", resp1)fmt.Printf("\nresp2: %#v", resp2.Animal)_ = json.Unmarshal(bs1, &resp3)fmt.Printf("\nresp3: %#v", resp3)if err := json.Unmarshal(bs1, resp4); err != nil {fmt.Printf("\nerr: %s", err.Error())}_ = json.Unmarshal(bs1, resp5)fmt.Printf("\nresp5: %#v", resp5)
}// Output
// bs1: {"Name":"xixi"}
// bs2: {"Name":"xixi"}
// resp1: main.Animal{Name:"xixi"}
// resp2: &main.Animal{Name:"xixi"}
// resp3: main.Human{Attr:""}
// err: json: Unmarshal(nil *main.Animal)
// resp3: main.Human{Attr:""}
// resp5: &main.Animal{Name:"xixi"}
【Golang】JSON Marshal Unmarshal相关推荐
- 【Golang】Go 语言 XML 的序列与反序列化实践
Go 语言 XML 的序列与反序列化实践 导读 本文使用 Go 原生支持的包,对 XML 字符串以及 .xml 文件进行序列化与反序列化实践.同时对 Go 语言下的 JSON 序列化反序列化与 XML ...
- 【Golang】关于Go中logrus的用法
一.标准日志库log 在日常开发中,日志是必不可少的功能.虽然有时可以用fmt库输出一些信息,但是灵活性不够.Go 标准库提供了一个日志库log. 1.快速使用 log是 Go 标准库提供的,不需要另 ...
- 【03】json使用
[03]json使用 把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSO ...
- 【cJson】 JSON格式详解
0.前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programmin ...
- golang反编译_【Golang】脱胎换骨的defer(一)
Go语言的defer是一个很方便的机制,能够把某些函数调用推迟到当前函数返回前才实际执行.我们可以很方便的用defer关闭一个打开的文件.释放一个Redis连接,或者解锁一个Mutex.而且Go语言在 ...
- 【Golang】解决Go test执行单个测试文件提示未定义问题
[Golang]解决Go test执行单个测试文件提示未定义问题 参考文章: (1)[Golang]解决Go test执行单个测试文件提示未定义问题 (2)https://www.cnblogs.co ...
- 【记录】json输出美化
[记录]json输出美化 json写入本地文件,用的json.dump直接写或者json.dumps然后写字符串:这两种方法写完之后发现字符串中的中文都变成ASCII码,难看! a = {'name' ...
- 【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)
[Java]json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理) 模拟请求API 获得json数据,将json转换为java对象,再将java对象转换为list集合,再将list ...
- [Android]【安卓】Json数据的快速拼装和解析
[Android][安卓]Json数据的快速拼装和解析 本篇博客已收录到我的安卓开发小结中--点击[安卓开发小结] 参考资料:介绍 Json 一.什么是Json数据 JSON(JavaScript O ...
- 【golang】map,切片,数组转json格式(详细过程)
//map,slice切片,arr数组类型 转为json json.Marshal() //对json解码转为指定map,slice切片,arr数组等类型 json.Unmarshal() map和j ...
最新文章
- mpvue开发小程序所遇问题及h5转化方案
- 华为4G路由器成软银快速部署宽带业务新利器
- .NET 6新特性试用 | System.Text.Json序列化代码自动生成
- Eclipse 下载 开源项目 maven依赖丢失和 Deployment Assembly 丢失
- 前端 - token 是什么?为什么每次请求头(HEADS)里要携带它?___请求时,为什么要携带token?
- 黑猿大叔-译文 | TensorFlow实现Batch Normalization
- base | 使用apply族函数进行向量化运算
- 鸿蒙升级后能恢复安卓吗,升级了鸿蒙系统怎么卸载鸿蒙系统?升级了鸿蒙还能用安卓吗?...
- sql server死锁_SQL Server如何选择死锁受害者
- Linux emacs考场配置及对拍脚本
- win固定ip无效,自动配成169.254.xx.xx
- CDI Features
- 【转】listView中,checkBox的显示和隐藏
- Vmware使用net模式共享虚拟机linux IP
- C++ std::shared_ptr是什么意思
- php laravel框架失败_急急急!!!ubuntu+laravel+nginx安装完成后,请求laravel框架失败...
- 按照软件的模板规范要求,修改了模板中的字体大小,为何展示时,字体并未发生变化?
- C++11 打印系统时间(精确到毫秒)和时间戳(毫秒单位)
- 压缩感知 热身实验 OMP算法Python实现(详细代码注释)
- 8.郝斌C语言笔记——函数