go语言处理数据
go语言处理json数据
go语言数据对象 -> json数据
- 结构体 struct -- 将结构体转成 json ,结构体成员变量第一个字母必须大写,只有字段首字母大写的才会被转换
- 数组 array 、切片 slice -- slice / array 转换成json 数据
- 集合 map --集合map转换成 json 数据 , map 的 key 必须是string类型,这是json要求的
- 上述数据结构组合在一起
使用struct tag的时候,几个注意点:
- 1、tag中标识的名称将称为json数据中key的值
- 2、tag可以设置为`json:"-"`来表示本字段不转换为json数据,即使这个字段名首字母大写
- 如果想要json key的名称为字符"-",则可以特殊处理`json:"-,"`,也就是加上一个逗号
- 3、如果tag中带有,omitempty选项,那么如果这个字段的值为0值,即false、0、""、nil等,这个字段将不会转换到json中
- 4、如果字段的类型为bool、string、int类、float类,而tag中又带有,string选项,那么这个字段的值将转换成json字符串
goToJson.go
/*
author:qb
date: 2020年11月 8日 20:01:10
what: go数据对象 -> json数据
*/
package main
import (
"encoding/json" //json包
"fmt"
)
//将结构体转成 json ,结构体成员变量第一个字母必须大写,只有字段首字母大写的才会被转换
type Post struct {
Name string
ShowName string
Des string
}
type Stu struct {
Info map[string]string `json:"个人信息"`
Hobby []string `json:"爱好"`
Enable bool `json:"是否启用"`
test []string `json:"tttt"`
}
func main() {
//将结构体转成 json
post := &Post{"xiaozhu", "hello xiaozhu", "this is a name"}
b, err := json.MarshalIndent(post, "", "\t") //一个字段占一行
if err != nil {
fmt.Println(nil)
}
fmt.Println(string(b))
//slice / array 转换成json 数据
post2 := []string{"apple", "pen", "penapple"}
b2, err2 := json.Marshal(post2)
if err2 != nil {
fmt.Println(nil)
}
fmt.Println(string(b2))
//集合map转换成 json 数据 , map 的 key 必须是string类型,这是json要求的
post3 := map[string]string{"name": "xiaozhu", "age": "13", "height": "168"}
b3, err3 := json.MarshalIndent(post3, "", "\t")
if err3 != nil {
fmt.Println(err)
}
fmt.Println(string(b3))
//组合在一起使用
var stu Stu
stu.Enable = true
stu.Hobby = []string{"running", "basketball", "football"}
stu.Info = map[string]string{
"name": "xiaozhu",
"age": "24",
"height": "178"}
bs, errs := json.MarshalIndent(&stu, "", "\t")
//bs, errs := json.Marshal(&stu)
if errs != nil {
fmt.Println(errs)
}
fmt.Println(string(bs))
}
json数据 -> go语言数据对象
解析json数据到struct(结构已知)
- 根据已知json文件进行分析,定义struct
- 使用os 打开json数据文件