package main
import (
"encoding/json"
"fmt"
)
// 定义一个结构体
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 := ([]byte(str), &monster)
if err != nil {
("unmarshal err=%v\n", err)
}
("反序列化后 monster=%v =%v \n", monster, )
}
// 对 map 进行序列化
func testMap() string {
// 定义一个map
var a map[string]interface{}
// 使用 map,需要 make
a = make(map[string]interface{})
a["name"] = "红孩儿~~~~~~"
a["age"] = 30
a["address"] = "洪崖洞"
data, err := (a)
if err != nil {
("序列化错误 err=%v\n", err)
}
// 输出序列化后的结果
("a map 序列化后=%v\n", string(data))
return string(data)
}
// 将 json 字符串,反序列化成 map
func unmarshalMap() {
//str := "{\"address\":\"洪崖洞\",\"age\":30,\"name\":\"红孩儿\"}"
str := testMap()
// 定义一个map
var a map[string]interface{}
// 反序列化
// 注意:反序列化map,不需要make,因为 make 操作被封装到 Unmarshal 函数
err := ([]byte(str), &a)
if err != nil {
("unmarshal err=%v\n", err)
}
("反序列化后 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 := ([]byte(str), &slice)
if err != nil {
("unmarshal err=%v\n", err)
}
("反序列化后 slice=%v\n", slice)
}
func main() {
("------------------------------------------------------------------------对结构体进行反序列化---------------------")
unmarshalStruct()
("------------------------------------------------------------------------对map进行反序列化----------------------")
unmarshalMap()
("------------------------------------------------------------------------对切片进行反序列化----------------------")
unmarshalSlice()
}