json数据的序列化和反序列化
导读 | json的全称是Javascript object notation, 中文全称:js对象表示法。在序列化和反序列化的协议中,有:json、xml、yaml、protocol buffer等。其中json是前后端API契约数据的主要传输形式。json支持数值、布尔值、数组和对象四种数据类型。通过这四种数据类型,可以构建复杂的数据模型。 |
在Go语言中,我们可以使用json标准库来实现数据的序列化和反序列化。这个库提供了方便的方法来序列化和反序列化map、结构体、数组、切片和内置的基本数据类型。通过使用json标准库,我们可以轻松地将数据转换为json格式,并在需要时将其解析回原始数据类型。这为我们处理数据提供了很大的便利性。
在这里,我将举三个例子来说明json的使用方法。对于初学者来说,可能经常只使用一种结构体对象来接收和发送数据。下面我们就来看看具体的例子。 1. 使用结构体对象接收数据: ``` type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { data := `{"name": "Alice", "age": 25}` var p Person err := json.Unmarshal([]byte(data), &p) if err != nil { fmt.Println("解析json失败:", err) return
type Person struct {<br>
Name string `json:"name"`<br>
Age int `json:"age"`<br>
}
<br>
func main() {<br>
var (<br>
newPer Person<br>
bts []byte<br>
)<br>
per:=Person{<br>
Name: "Lily",<br>
Age: 29,<br>
}<br>
// 序列化<br>
if bts, err = json.Marshal(per); err !=nil{<br>
log.Fatal(err.Error())<br>
return<br>
}
<br>
if err = json.Unmarshal(bts, &newPer); err !=nil{<br>
log.Fatal(err.Error())<br>
return<br>
}<br>
fmt.Println(newPer)<br>
}
func main() {<br>
var (<br>
smap = map[string]int{<br>
"Age": 28,<br>
"Sex": 1,<br>
"Floor": 12,<br>
}<br>
newSmap = make(map[string]int)<br>
bts []byte<br>
)<br>
if bts, err = json.Marshal(smap); err !=nil {<br>
log.Fatal(err.Error())<br>
return<br>
}<br>
if err = json.Umarshal(bts, &newSmap); err !=nil {<br>
log.Fatal(err.Error())<br>
return<br>
}<br>
fmt.Println(newSmap)<br>
}
func main() {<br>
var (<br>
ages []int = []int{23, 20, 28, 25, 30}<br>
bts []byte<br>
err error<br>
newAges = make([]int, len(ages))<br>
)<br>
if bts, err = json.Marshal(ages); err != nil {<br>
fmt.Println(err.Error())<br>
return<br>
}<br>
if err = json.Unmarshal(bts, &newAges); err != nil {<br>
fmt.Println(err.Error())<br>
return<br>
}<br>
fmt.Println("new ages: ", newAges)<br>
return<br>
}
初学者对结构体的json序列化和反序列化比较清楚,对后两种可能很少用,也不会用。
- 对于数组类型数据,但是有些业务场景前端会使用。
- 对于map类型,一般会在Go语言的服务端调用第三方REST接口时,服务端只想要指定的返回码,判断是否调用成功时。程序猿不想写整体的struct结构体定义,也可能是比较懒,然后用了一个map[string]interface{}去接收返回数据。这时候通过json标准库中的Unmarshal反序列化后,然后通过map["err_code"].(int)获取返回码,然后再做其他后续处理逻辑。
这里还要说明一个结构体时,有时候我会用到的特性,结构体的json支持的标签值特性omitempty,例如:
type Person struct {<br>
Name string `json:"name,omitempty"`<br>
Age int `json:"age"`<br>
}<br>
它表示,当函数omitempty的标签值时,它所对应的结构体的数据元素值如果是零值,则它不会输出。那就是说如果服务端返回的结构体数据中的某个元素为空时,不返回给前端这个元素,就可以使用omitempty的json标签值属性。
在这里给大家提供一个滴滴公司的一位高级工程师taowen写的json解析库,世界上最快的。github地址:jsoniter。
- OpenFermion 的详细介绍:点击查看
- OpenFermion 的下载地址:点击下载
以上是json数据的序列化和反序列化的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

CentOS 和 Ubuntu 的关键差异在于:起源(CentOS 源自 Red Hat,面向企业;Ubuntu 源自 Debian,面向个人)、包管理(CentOS 使用 yum,注重稳定;Ubuntu 使用 apt,更新频率高)、支持周期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社区支持(CentOS 侧重稳定,Ubuntu 提供广泛教程和文档)、用途(CentOS 偏向服务器,Ubuntu 适用于服务器和桌面),其他差异包括安装精简度(CentOS 精

CentOS 安装步骤:下载 ISO 映像并刻录可引导媒体;启动并选择安装源;选择语言和键盘布局;配置网络;分区硬盘;设置系统时钟;创建 root 用户;选择软件包;开始安装;安装完成后重启并从硬盘启动。

CentOS 已停止维护,替代选择包括:1. Rocky Linux(兼容性最佳);2. AlmaLinux(与 CentOS 兼容);3. Ubuntu Server(需要配置);4. Red Hat Enterprise Linux(商业版,付费许可);5. Oracle Linux(与 CentOS 和 RHEL 兼容)。在迁移时,考虑因素有:兼容性、可用性、支持、成本和社区支持。

如何使用 Docker Desktop?Docker Desktop 是一款工具,用于在本地机器上运行 Docker 容器。其使用步骤包括:1. 安装 Docker Desktop;2. 启动 Docker Desktop;3. 创建 Docker 镜像(使用 Dockerfile);4. 构建 Docker 镜像(使用 docker build);5. 运行 Docker 容器(使用 docker run)。

Docker利用Linux内核特性,提供高效、隔离的应用运行环境。其工作原理如下:1. 镜像作为只读模板,包含运行应用所需的一切;2. 联合文件系统(UnionFS)层叠多个文件系统,只存储差异部分,节省空间并加快速度;3. 守护进程管理镜像和容器,客户端用于交互;4. Namespaces和cgroups实现容器隔离和资源限制;5. 多种网络模式支持容器互联。理解这些核心概念,才能更好地利用Docker。

Docker镜像构建失败的故障排除步骤:检查Dockerfile语法和依赖项版本。检查构建上下文中是否包含所需源代码和依赖项。查看构建日志以获取错误详细信息。使用--target选项构建分层阶段以识别失败点。确保使用最新版本的Docker引擎。使用--t [image-name]:debug模式构建镜像以调试问题。检查磁盘空间并确保足够。禁用SELinux以防止干扰构建过程。向社区平台寻求帮助,提供Dockerfile和构建日志描述以获得更具体的建议。

CentOS 停止维护后,用户可以采取以下措施应对:选择兼容发行版:如 AlmaLinux、Rocky Linux、CentOS Stream。迁移到商业发行版:如 Red Hat Enterprise Linux、Oracle Linux。升级到 CentOS 9 Stream:滚动发行版,提供最新技术。选择其他 Linux 发行版:如 Ubuntu、Debian。评估容器、虚拟机或云平台等其他选项。

VS Code 系统要求:操作系统:Windows 10 及以上、macOS 10.12 及以上、Linux 发行版处理器:最低 1.6 GHz,推荐 2.0 GHz 及以上内存:最低 512 MB,推荐 4 GB 及以上存储空间:最低 250 MB,推荐 1 GB 及以上其他要求:稳定网络连接,Xorg/Wayland(Linux)
