Go语言学习笔记之序列化与反序列化
序列化
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string `json:"用户名"`//反射机制
Age int `json:"年龄"`
Sex string `json:"性别"`
}
func json_Struct() {
u:=User{"Jack",23,"男"}
data,err:=json.Marshal(&u)
if err!=nil{
fmt.Println("出错!")
return
}
fmt.Printf("序列化后=%v\n", string(data))
}
func json_Map(){
mp:=map[string]int{
"Jack":21,
"Amy":23,
"David":89,
}
data,err:=json.Marshal(&mp)
if err!=nil{
fmt.Println("出错!")
}
fmt.Println(string(data))
}
func json_Slice(){
arr:=[]map[string]interface{}{
{"jack":21},{"tom":23},{"Mg":24},
}
data,err:=json.Marshal(&arr)
if err!=nil{
fmt.Println("出错!")
}
fmt.Println(string(data))
}
func main() {
json_Struct()
json_Map()
json_Slice()
arr:=[...]int{1,2,3,4}
data,err:=json.Marshal(&arr)
if err!=nil{
fmt.Println("出错!")
}
fmt.Println(string(data))
}
反序列化
package main
import ( "fmt"
"encoding/json"
)
//定义一个结构体
type Monster struct {
Name string
Age int
Birthday string //.... Sal float64
Skill string
}
//演示将 json 字符串,反序列化成 struct
func unmarshalStruct() {
//说明 str 在项目开发中,是通过网络传输获取到.. 或者是读取文件获取到
str := "{\"Name\":\"牛魔王\",\"Age\":500,\"Birthday\":\"2011-11-11\",\"Sal\":8000,\"Skill\":\"牛魔拳\"}"
//定义一个 Monster 实例
var monster Monster
err := json.Unmarshal([]byte(str), &monster)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 monster=%v monster.Name=%v \n", monster, monster.Name)
}
//演示将 json 字符串,反序列化成 map
func unmarshalMap() {
str := "{\"address\":\"洪崖洞\",\"age\":30,\"name\":\"红孩儿\"}"
//定义一个 map
var a map[string]interface{}
//反序列化
//注意:反序列化 map,不需要 make,因为 make 操作被封装到 Unmarshal 函数
err := json.Unmarshal([]byte(str), &a)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 a=%v\n", a)
}
//演示将 json 字符串,反序列化成切片
func unmarshalSlice() {
str := "[{\"address\":\"北京\",\"age\":\"7\",\"name\":\"jack\"}," +
"{\"address\":[\"墨西哥\",\"夏威夷\"],\"age\":\"20\",\"name\":\"tom\"}]"
//定义一个 slice
var slice []map[string]interface{}
//反序列化,不需要 make,因为 make 操作被封装到 Unmarshal 函数
err := json.Unmarshal([]byte(str), &slice)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 slice=%v\n", slice)
}
func main() {
unmarshalStruct()
unmarshalMap()
unmarshalSlice()
}

浙公网安备 33010602011771号