json序列化
go json序列化
标签
type Monster struct {
Name string `json:"name"`
Age int `json:"age"`
Birthday string `json:"birthday"`
Sal float64 `json:"sal"`
Skill string `json:"skill"`
}
就是序列化将里面的字段大写转成小写,也可以重新定义
type Monster struct {
Name string `json:"name_n"` //反射机制
Age int `json:"age_a"`
Birthday string `json:"birthday_b"`
Sal float64 `json:"sal_s"`
Skill string `json:"skill_s"`
}
package main
import (
"encoding/json"
"fmt"
)
type Monster struct {
Name string
Age int
Birthday string
Sal float64
Skill string
}
func testStruct() {
monster := Monster{Name: "牛魔王", Age: 400, Birthday: "3030-10-1", Sal: 32000.0, Skill: "牛魔拳"}
//将monster序列化
data ,err :=json.Marshal(&monster)
if err !=nil{
fmt.Println("序列化失败,err = ",err)
}
fmt.Println("data= ",string(data))
}
//将maps序列化
func testMap(){
var a map[string]interface{}
//使用map要make一下
a = make(map[string]interface{})
a ["name"]="洗澡"
data ,err :=json.Marshal(a)
if err !=nil{
fmt.Println("序列化失败,err = ",err)
}
fmt.Println("data= ",string(data))
}
//将切片序列化,切片有多个map
func testSlice(){
var slice []map[string]interface{}
var m1 map[string]interface{}
m1=make(map[string]interface{})
m1["name"]="信息"
//将map放到切片中
slice = append(slice,m1)
var m2 map[string]interface{}
m2=make(map[string]interface{})
m2["name"]="ss"
slice = append(slice,m2)
data ,err :=json.Marshal(slice)
if err !=nil{
fmt.Println("序列化失败,err = ",err)
}
fmt.Println("data= ",string(data))
}
func main() {
//演示将结构体,map,切片进行序列化
testStruct()
testMap()
testSlice()
}
go反序列化
package main
import (
"encoding/json"
"fmt"
)
type Monster struct {
Name string
Age int
Birthday string
Sal float64
Skill string
}
func unmarshalStruct() {
srt := "{\"Name\":\"牛魔王\",\"Age\":400,\"Birthday\":\"3030-10-1\",\"Sal\":32000,\"Skill\":\"牛魔拳\"}"
//创建一个Monster实例
var monster Monster
err := json.Unmarshal([]byte(srt), &monster)
if err != nil {
fmt.Println("序列化失败,err = ", err)
}
fmt.Println("data= ", monster)
}
func unmarshalMap(){
str := "{\"Name\":\"牛魔王\",\"Age\":400,\"Birthday\":\"3030-10-1\",\"Sal\":32000,\"Skill\":\"牛魔拳\"}"
var a map[string]interface{}
//反序列化map,不需要make操作,因为被封装到函数里面了
err := json.Unmarshal([]byte(str), &a)
if err != nil {
fmt.Println("序列化失败,err = ", err)
}
fmt.Println("data= ", a)
}
func unmarshalSlice(){
str := "[{\"Name\":\"王\",\"Age\":\"400\"},{\"Name\":\"牛\",\"Age\":\"400\"}]"
var a []map[string]interface{}
//反序列化map,不需要make操作,因为被封装到函数里面了
err := json.Unmarshal([]byte(str), &a)
if err != nil {
fmt.Println("序列化失败,err = ", err)
}
fmt.Println("data= ", a)
}
func main() {
unmarshalStruct()
unmarshalMap()
unmarshalSlice()
}