go中的序列化和反序列化

序列化:

// 序列化

package main

import(
	"fmt"
	"encoding/json"

)

type Monster struct{
	Name string `json:"monster_name"`  // 反射机制
	Age int 
	Birthday string
	Sal float64
	skill string
}

func testStruct(){
	monster := Monster{
		Name: "liyuyuan",
		Age: 24,
		Birthday: "19960216",
		Sal: 8000.0,
		skill: "吃饭睡觉打豆豆",

	}
	// 将monster进行序列化
	data,err := json.Marshal(&monster)
	if err != nil{
		fmt.Printf("序列化失败")
	}
	fmt.Println(string(data))
}

// 将map进行序列化 注意序列化之后没有顺序

func testMap(){
	// 定义一个map
	var a map[string]interface{}
	// 使用map之前需要make
	a = make(map[string]interface{})
	a["liyuyuan"] = "xiong"
	data,err := json.Marshal(a)
	if err != nil{
		fmt.Printf("序列化失败")
	}
	fmt.Println(string(data))
}

// 对切片进行序列化
func testslice(){
	var slice []map[string]interface{}
	var m1 map[string]interface{}
	// 使用map前需要先make
	m1 = make(map[string]interface{})
	m1["liyuyuan"] = "xiong"
	m1["年龄"] = 24
	m1["xuhuan"] = "xiongchunhui"
	slice = append(slice,m1)
	var m2 map[string]interface{}
	// 使用map前需要先make
	m2 = make(map[string]interface{})
	m2["xiongchunhui"] = "li"
	m2["年龄"] = 23
	m2["xihuan"] = "liyuyuan"
	slice = append(slice,m2)
	// 将切片进行序列化
	data,err := json.Marshal(&slice)
	if err != nil{
		fmt.Printf("序列化失败")
	}
	fmt.Println(string(data))


}
// 对基本的数据类型进行序列化
func testFloat64(){
	var num1 float64 = 300.21
	// 进行序列化
	data,err := json.Marshal(num1)
	if err != nil{
		fmt.Printf("序列化失败")
	}
	fmt.Println(string(data))


}




func main(){
	testStruct()
	testMap()
	testslice() 
	testFloat64()  // 基本的数据类型序列化

}

反序列化:

package main 
import(
	"fmt"
	"encoding/json"
)

type Monster struct{
	Name string   // 反射机制
	Age int 
	Birthday string
	Sal float64
	skill string
}

func unmarshalStruct(){
	str := "{\"Name\": \"liyuyuan\",\"Age\": 24,\"Birthday\":"+
	" \"19960216\",\"Sal\": 8000.0,\"skill\": \"吃饭睡觉打豆豆\"}"
	// 定义一个monster
	var monster Monster
	err := json.Unmarshal([]byte(str), &monster)
	if err != nil{
		fmt.Println("出错",err)
	}
	fmt.Printf("%v%v",monster,monster.Name)
}

func unmarshalMap(){
	str := "{\"Name\": \"liyuyuan\",\"Age\": 24,\"Birthday\":"+
	" \"19960216\",\"Sal\": 8000.0,\"skill\": \"吃饭睡觉打豆豆\"}"
	var a map[string]interface{}
	 //反序列化
	 // 反序列化时不需要进行make操作
	err := json.Unmarshal([]byte(str), &a)
	if err != nil{
		fmt.Println("出错",err)
	}

}


func main(){
	unmarshalStruct()
	unmarshalMap()
}
发布了37 篇原创文章 · 获赞 0 · 访问量 634

猜你喜欢

转载自blog.csdn.net/xionglaine/article/details/104333018