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()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值