持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
本文主要关于GO语言的JSON处理和时间处理
JSON(JavaScript Object Notation)处理
JSON简介:
一种数据格式,用于在客户端与服务器之间进行数据交换,是一种比XML更轻量级的数据交换格式,适用于各种语言,各种平台(Windows,Linux等)。表现为键/值对集合的文本描述形式
可以用JSON传输简单的字符串,数字,布尔值,也可以传输一个数组,或者更复杂的复合结构。在Web开发领域中,广泛应用于Web服务端程序和客户端程序之间的数据通信 GO支持JOSN,有内置标准库
生成JSON(编码)
1) 根据结构体的内容创建JSON
具体方法如下;先创建结构体并初始化 然后调用函数用结构体的内容生成JSON 最后执行其他操作
代码14,15
package main
import (
"encoding/json" //加进包
"fmt"
)
//用结构体创建JSON时,成员名首字母必须大写
type IT struct {
Company string
Subjects []string //切片类型
Isok bool
Price float64
}
func main() {
//定义一个结构体变量 同时初始化
s := IT{"itcsat", []string{"GO", "C++", "Python"}, true, 666.66}
//编码,根据结构体内容生成JSON文本
//buf, err := json.Marshal(s) //调用库函数生成JSON 这种方法打印出的内容均在一行
buf, err := json.MarshalIndent(s, "", " ") //格式化编码 还原原本的格式 分别表示空格和缩进
if err != nil {
fmt.Println("err=", err)
return
}
//fmt.Println("buf=", buf) 若直接打印buf会出现一串ASCII值 所以需要用string.(buf)打印成字符串
fmt.Println("buf=", string(buf))
}
注:
/*JSON中关于首字母大小写的修改 只能在定义的后面修改
type IT struct {
Company string 'json:"company"'//把首字母变成小写 'json:"-"'表示该字段不会打印到屏幕
Subjects []string 'json:"subjects"'
Isok bool //'json:",bool"'可把他打印成字符串到屏幕
Price float64
}
*/
2) 根据map生成JSON
创建一个map并初始化 然后调用函数用结构体的内容生成JSON 最后执行其他操作
package main
import (
"encoding/json"
"fmt"
)
func main() {
m := make(map[string]interface{}, 4)//空接口
m["company"] = "itcast"
m["subjects"] = []string{"GO", "C", "Python"}
m["isok"] = true
m["price"] = 666.66
result, err := json.MarshalIndent(m, "", " ")
if err != nil {
fmt.Println("err=", err)
return
}
//fmt.Println("buf=", buf) 若直接打印buf会出现一串ASCII值 所以需要用string.(buf)打印成字符串
fmt.Println("result=", string(result))
}
解析JSON(解码)
1) 解析到结构体
2) 解析到map
有四个字段 就把MAP的长度设为4
//解析到m 故最后打印的是m
// 无法强制将JSON里的内容进行相应类型的转换 ->类型断言 先把每个字段的内容取出来 再遍历
//类型断言是值,它是value类型 搭配switch case使用 先把数据反馈给它相应的类型 再存储打印
//例子中的切片类型不是string类型 而是空切片interface{}类型
//与解析到结构体的区别是 若要实实在在知道数据是何种类型 还需要用类型断言逐个反馈
时间处理
常用函数time.now 快速获取当前时间 也可以用time.Date快速构造一串带时序的时间 再通过其它函数操作获取不同值 详见: