json序列化
package main
import("fmt""encoding/json"
)type Monster struct{Name stringAge intSkill 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"] = 10m2 = make(map[string]interface{})m2["name"] = "tom"m2["age"] = 20slice = append(slice, m1)slice.append(slice, m2)data, err := json.Marshal(slice)
}// 基本数据类型序列化
func testFloat() {var num float64 = 24.56json.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字段的顺序需要严格一致。