一、序列化
(1)map 序列化
// 初始化map
var jsonMap map[string]interface{}
jsonMap = make(map[string]interface{}, 2)
jsonMap["项目"] = []int{111,2,2,2,2,3,44555}
jsonMap["资源"] = []string{"哇哈哈", "万达"}
// json.Marshal 序列化map
mapstr, _ := json.Marshal(jsonMap)
fmt.Println(string(mapstr))
输出:{"资源":["哇哈哈","万达"],"项目":[111,2,2,2,2,3,44555]}
(2)切片 序列化
slice := make([]map[string]interface{}, 2, 4)
jsonMap = make(map[string]interface{}, 2)
jsonMap["项目"] = []int{111,2,2,2,2,3,44555}
jsonMap["资源"] = []string{"哇哈哈", "万达"}
slice[0] = jsonMap
jsonMap = make(map[string]interface{}, 2)
jsonMap["项目2"] = []int{111,2,2,2,2,3,44555}
jsonMap["资源2"] = []string{"哇哈哈", "万达"}
slice[1] = jsonMap
// 切片序列化
slicestr, _ := json.Marshal(slice)
fmt.Println(string(slicestr))
输出:[{"资源":["哇哈哈","万达"],"项目":[111,2,2,2,2,3,44555]},{"资源2":["哇哈哈","万达"],"项目2":[111,2,2,2,2,3,44555]}]
(3)结构体 序列化
结构体序列化需要注意,字段都需要大写,小写字母开头其他包无法访问,导致无法序列化该字段
type name struct {
Names [4]string `json:"names"`
Age int `json:"age"`
}
func main(){
// 序列化结构体
names := name{[4]string{"1","2","3","4"}, 20}
str, _ := json.Marshal(names)
fmt.Println(string(str))
}
输出:{"names":["1","2","3","4"],"age":20}
二、反序列化
故名思意,反序列化就是将json字符串转化成对应的数据类型(如结构体、map、切片等等)的操作
接序列化操作,变量直接以上述变量进行引用
(1)map 反序列化
需要注意:json.Unmarshal()需要传递指针,因为在该方法内部会make,重新赋值!
var jsonMap2 map[string]interface{}
err2 := json.Unmarshal(mapstr, &jsonMap2)
fmt.Println(jsonMap2, err2)
(2)切片 反序列化
slice2 := make([]map[string]interface{}, 2, 4)
err3 := json.Unmarshal(slicestr, &slice2)
fmt.Println(slice2, err3)
(3)结构体 反序列化
name := name{}
err := json.Unmarshal(str, &name)
if err != nil {
fmt.Println("失败")
}
fmt.Println("成功:", name.Names, name.Age)