1、json
1.1、json基本介绍:
1.2、json数据格式说明
2、json的序列化
2.1、结构体及结构体切片的序列化
package main
import (
"encoding/json"
"fmt"
)
/**
* @Description:golang中对json数据操作的支持
* @Author: guai
* @Date:2020/2/24 17:37
**/
type Vegetables struct {
//可通过指定tag标签在序列化时为key指定一个新的名字 `为键盘左上角的异音符 不是引号!!!
Name string `json:"Vegetables_name"`
Age int
Birthday string
Sal float64
Skill string
}
func main() {
cabbage := Vegetables{
"cabbage",
1,
"2020-20-20",
15.6,
"eat",
}
radish := Vegetables{
"radish",
1,
"2020-20-20",
13.3,
"eat",
}
var veges []Vegetables
veges = append(veges, cabbage)
veges = append(veges, radish)
//将一个Vegetables类型的变量格式化
//data, err := json.Marshal(&cabbage)
//将veges切片序列化
data, err := json.Marshal(veges)
if err != nil {
fmt.Println("序列化错误", err)
return
}
fmt.Println("data:", string(data))
}
结果:
2.2、map及map切片的序列化
func main(){
//2、map的序列化
//定义一个map vegetables key为string类型,value为interface可用于接收所有类型的数据
var vegetable map[string]interface{}
//map需要使用make初始化
vegetable = make(map[string]interface{})
vegetable["name"] = "cabbage"
vegetable["age"] = 1
vegetable["skill"] = "eat"
var vegetable1 map[string]interface{}
vegetable1 = make(map[string]interface{})
vegetable1["name"] = "cabbage"
vegetable1["age"] = 1
vegetable1["skill"] = "eat"
var vegetables []map[string]interface{}
vegetables = append(vegetables, vegetable)
vegetables = append(vegetables, vegetable1)
//序列化map
//data, err := json.Marshal(vegetable)
//序列化map切片
data, err := json.Marshal(vegetables)
if err != nil {
fmt.Println("序列化出错!err:", err)
return
}
fmt.Println("data:", string(data))
}
结果:
3、json反序列化
json反序列化值,将json字符串反序列化为对应的数据类型如结构体、map、切片
案例:
type Vegetables struct {
Name string `json:"Vegetables_name"`
Age int
Birthday string
Sal float64
Skill string
}
func main(){
//3、反序列化
//3.1、反序列化为结构体切片
// ``异音符表示 ``中的特殊字符不需要使用转义字符\转义
str := `[{"Vegetables_name":"cabbage","Age":1,"Birthday":"2020-20-20","Sal":15.6,"Skill":"eat"},{"Vegetables_name":"radish","Age":1,"Birthday":"2020-20-20","Sal":13.3,"Skill":"eat"}]`
//定义Vegetables切片 因为在开发中一般不能确定到底有几条数据故使用切片接收数据较为合理
var vegetables []Vegetables
err := json.Unmarshal([]byte(str), &vegetables)
if err != nil {
fmt.Println("反序列化错误", err)
return
}
fmt.Println("vegetables:", vegetables)
//3.2、反序列化为map切片
str1 := `[{"age":1,"name":"cabbage","skill":"eat"},{"age":1,"name":"cabbage","skill":"eat"}]`
var vegetables1 []map[string]interface{}
err = json.Unmarshal([]byte(str1), &vegetables1)
if err != nil {
fmt.Println("饭序列化错误:", err)
return
}
fmt.Println("vegetables1;", vegetables1)
//[{"age":1,"name":"cabbage","skill":"eat"},{"age":1,"name":"cabbage","skill":"eat"}]
}
结果