json序列化
package main
import(
"fmt"
"encoding/json"
)
type Monster struct{
Name string
Age int
Skill string
}
// 结构体序列化
func serialize_struct() {
monster := Monster{
Name : "niumo",
Age : 500,
Skill : "bajiaoshan",
}
// 这里传指针主要是减少拷贝
data, err := json.Marshal(&monster)
if err != nil {
fmt.Printf("trans to json failed")
}
fmt.Printf("%v", string(data))
}
// map序列化
func serialize_map() {
// 定义一个interface做value的的map,可以让interface存储任意类型
var a map[string]interface{}
a = make(map[string]interface{})
a["zhu"] = "bajie"
a["hou"] = "wukong"
a["num"] = 4
// 引用类型不需要传地址
data, err := json.Marshal(a)
}
// 切片序列化
func serialize_slice() {
var slice []map[string]interface{}
var m1 map[string]interface{}
m1 = make(map[string]interface{})
m1["name"] = "jack"
m1["age"] = 10
m2 = make(map[string]interface{})
m2["name"] = "tom"
m2["age"] = 20
slice = append(slice, m1)
slice.append(slice, m2)
data, err := json.Marshal(slice)
}
// 基本数据类型序列化
func testFloat() {
var num float64 = 24.56
json.Marshal(&num)
}
func main() {
}
结构体要序列化成自己的标签名字看我们前面的文章即可,此处不再赘述
json反序列化
func unserialize_struct() {
str := "{\"Age\":20,\"Name\":\"xiaodu\",\"Skill\":\"hit\"}"
var monster Monster
// 这里必须传monster指针
err := json.Unmarshal([]byte[str], &monster)
}
反序列化map类似,反序列化map时不需要通过make来开辟空间,Unmarshal里面会进行make,同时map字段的顺序需要严格一致。