JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文本描述形式(类似一些编程语言中的字典结构),这使它成为较为理想的、跨平台、跨语言的数据交换语言。
例如:
{
"Company": "itcast",
"Subjects": [
"Go",
"C++",
"Python",
"Test"
],
"IsOk": true,
"Price": 666.666
}
开发者可以用 JSON 传输简单的字符串、数字、布尔值,也可以传输一个数组,或者一个更复杂的复合结构。在 Web 开发领域中, JSON被广泛应用于 Web 服务端程序和客户端之间的数据通信。
Go语言内建对JSON的支持。使用Go语言内置的encoding/json 标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据。主要就是运用json.MarshalIndent(m, "", " ")
和json.Unmarshal([]byte(jsonBuf), &tmp)
进行json的生成和解析
对于struct tag
我们看到上面的输出字段名的首字母都是大写的,如果你想用小写的首字母怎么办呢?把结构体的字段名改成首字母小写的?JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出,所以必须通过struct tag定义来实现。
针对JSON的输出,我们在定义struct tag的时候需要注意的几点是:
- 字段的tag是"-",那么这个字段不会输出到JSON
- tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中
- tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中
- 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串
type IT struct {
// 成员变量名首字母必须大写
Company string
Subjects []string
IsOk bool
Price float64
}
// 如果要对成员变量进行大小写等的修改,不能直接进行修改,而是要进行二次编码
type IT struct {
Company string `json:"-"` // - 表示该行不会输出到屏幕上
Subjects []string `json:"Subjects"` // 这样就会把Subjects编程小写subjects了
IsOk bool `json:",string"` // 将变量变成字符串的形式输出,注意,和string之间不能有空格
Price float64 `json:",string"` // 将变量变成字符串的形式输出,注意,和string之间不能有空格
}
JSON的生成
1. 通过结构体生成json
type IT struct {
// 成员变量名首字母必须大写
Company string