这大概是程序员最熟悉的仪式:深夜,盯着屏幕,手里揣着咖啡,祈祷着JSON解析不要报错。
01 简明扼要,Go语言标准库初探
Go语言标准库(Standard Library)是Go编程语言自带的一组库,提供了丰富的功能和工具,帮助开发者快速构建高效、可靠的应用程序。
它涵盖了网络编程、文件I/O、文本处理、加密、并发等多方面的内容,使得开发者无需依赖第三方库就能完成大部分常见任务。这大大提高了开发效率,并确保了代码的稳定性和兼容性。
用官方话说,标准库就是Go语言的“杀鸡专用刀”,锋利且趁手。无论是创建Web服务器、处理文件,还是操作数据,标准库都能给你惊喜。
encoding/json包就是这些利器中的一员,专门负责JSON数据的编码和解码工作。
02 入门基石,encoding/json包基础
encoding/json是Go语言标准库中用于处理JSON数据的核心包,它提供了一系列函数和方法,帮助我们在Go数据类型和JSON表示之间进行转换。
核心函数
json.Marshal():将Go数据结构编码为JSON格式。json.Unmarshal():将JSON数据解码为Go数据结构。json.Encoder:将JSON编码直接流式传输到os.Writer,如os.Stdout甚至HTTP响应体。json.Decoder:从流中解码JSON数据,适用于大型JSON数据或流式数据的解析。
基本数据类型编码
让我们从最简单的例子开始,看看基本数据类型如何被编码为JSON:
package main
import (
"encoding/json"
"fmt"
)
func main() {
// 编码基本数据类型
bolB, _ := json.Marshal(true)
fmt.Println(string(bolB)) // 输出: true
intB, _ := json.Marshal(1)
fmt.Println(string(intB)) // 输出: 1
fltB, _ := json.Marshal(2.34)
fmt.Println(string(fltB)) // 输出: 2.34
strB, _ := json.Marshal("gopher")
fmt.Println(string(strB)) // 输出: "gopher"
// 编码切片和映射
slcD := []string{"apple", "peach", "pear"}
slcB, _ := json.Marshal(slcD)
fmt.Println(string(slcB)) // 输出: ["apple","peach","pear"]
mapD := map[string]int{"apple": 5, "lettuce": 7}
mapB, _ := json.Marshal(mapD)
fmt.Println(string(mapB)) // 输出: {"apple":5,"lettuce":7}
}
如你所见,json.Marshal()函数接受任何Go值,并返回其JSON表示的字节切片。简单得就像喝咖啡一样自然。
03 结构体与JSON,天生一对
在处理复杂数据结构时,我们通常会使用结构体来映射JSON数据。这种方式不仅提高了代码的可读性,还能利用Go语言的类型系统来确保数据的正确性。
基本结构体映射
假设我们有一个表示个人的JSON对象,可以定义如下结构体:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}
结构体字段标签(如`json:"name"`)是Go语言的一个强大特性,它告诉encoding/json包在编解码时使用指定的字段名。
只有导出的字段(以大写字母开头)才会在JSON中进行编码/解码。
解码JSON到结构体
func mai

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



