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相关推荐

  1. 【Golang】Go 语言 XML 的序列与反序列化实践

    Go 语言 XML 的序列与反序列化实践 导读 本文使用 Go 原生支持的包,对 XML 字符串以及 .xml 文件进行序列化与反序列化实践.同时对 Go 语言下的 JSON 序列化反序列化与 XML ...

  2. 【Golang】关于Go中logrus的用法

    一.标准日志库log 在日常开发中,日志是必不可少的功能.虽然有时可以用fmt库输出一些信息,但是灵活性不够.Go 标准库提供了一个日志库log. 1.快速使用 log是 Go 标准库提供的,不需要另 ...

  3. 【03】json使用

    [03]json使用 把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSO ...

  4. 【cJson】 JSON格式详解

    0.前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programmin ...

  5. golang反编译_【Golang】脱胎换骨的defer(一)

    Go语言的defer是一个很方便的机制,能够把某些函数调用推迟到当前函数返回前才实际执行.我们可以很方便的用defer关闭一个打开的文件.释放一个Redis连接,或者解锁一个Mutex.而且Go语言在 ...

  6. 【Golang】解决Go test执行单个测试文件提示未定义问题

    [Golang]解决Go test执行单个测试文件提示未定义问题 参考文章: (1)[Golang]解决Go test执行单个测试文件提示未定义问题 (2)https://www.cnblogs.co ...

  7. 【记录】json输出美化

    [记录]json输出美化 json写入本地文件,用的json.dump直接写或者json.dumps然后写字符串:这两种方法写完之后发现字符串中的中文都变成ASCII码,难看! a = {'name' ...

  8. 【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)

    [Java]json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理) 模拟请求API 获得json数据,将json转换为java对象,再将java对象转换为list集合,再将list ...

  9. [Android]【安卓】Json数据的快速拼装和解析

    [Android][安卓]Json数据的快速拼装和解析 本篇博客已收录到我的安卓开发小结中--点击[安卓开发小结] 参考资料:介绍 Json 一.什么是Json数据 JSON(JavaScript O ...

  10. 【golang】map,切片,数组转json格式(详细过程)

    //map,slice切片,arr数组类型 转为json json.Marshal() //对json解码转为指定map,slice切片,arr数组等类型 json.Unmarshal() map和j ...

最新文章

  1. mpvue开发小程序所遇问题及h5转化方案
  2. 华为4G路由器成软银快速部署宽带业务新利器
  3. .NET 6新特性试用 | System.Text.Json序列化代码自动生成
  4. Eclipse 下载 开源项目 maven依赖丢失和 Deployment Assembly 丢失
  5. 前端 - token 是什么?为什么每次请求头(HEADS)里要携带它?___请求时,为什么要携带token?
  6. 黑猿大叔-译文 | TensorFlow实现Batch Normalization
  7. base | 使用apply族函数进行向量化运算
  8. 鸿蒙升级后能恢复安卓吗,升级了鸿蒙系统怎么卸载鸿蒙系统?升级了鸿蒙还能用安卓吗?...
  9. sql server死锁_SQL Server如何选择死锁受害者
  10. Linux emacs考场配置及对拍脚本
  11. win固定ip无效,自动配成169.254.xx.xx
  12. CDI Features
  13. 【转】listView中,checkBox的显示和隐藏
  14. Vmware使用net模式共享虚拟机linux IP
  15. C++ std::shared_ptr是什么意思
  16. php laravel框架失败_急急急!!!ubuntu+laravel+nginx安装完成后,请求laravel框架失败...
  17. 按照软件的模板规范要求,修改了模板中的字体大小,为何展示时,字体并未发生变化?
  18. C++11 打印系统时间(精确到毫秒)和时间戳(毫秒单位)
  19. 压缩感知 热身实验 OMP算法Python实现(详细代码注释)
  20. 8.郝斌C语言笔记——函数

热门文章

  1. python闰月计算_Python实例讲解 -- 获取本地时间日期(日期计算)
  2. 前端弹出对话框 js实现 ajax交互
  3. Python的dataframe_image使用报错
  4. Linux目录结构和文件、目录常用命令
  5. Manjaro - Pacman命令详解
  6. 内网/外网实现部署nginx服务
  7. 转载黑苹果10.13N卡驱动方法
  8. Sql Server Update 更新数据
  9. 使用curl完成POST数据给飞信接口
  10. 为什么说程序员做外包没前途?