Json序列化和反序列化
序列化 将数据转换成为json格式的
包“encoding/json”
结构体的序列化
package main
import (
"fmt"
"encoding/json"
)
type User struct{
Username string
Nickname string
Age int
Birth string
Sex int
Email string
Phone string
}
func main(){
user1 := &User{
Username:"echo",
Nickname:"qian",
Age:22,
Birth:"0324",
Sex:1,
Email:"echoqian@qq.com",
Phone:"18821690781",
}
//结构体的序列化
data, err := json.Marshal(user1)
if err != nil{
fmt.Println("failed!", err)
return
}
fmt.Printf("%s\n",data)
}
map的序列化
package main
import (
"fmt"
"encoding/json"
)
func main(){
var m map[string]interface{}
m = make(map[string]interface{})
m["Username"] = "echoqian"
m["Nickname"] = "qpy"
m["Age"] = 21
m["Sex"] = 1
//map的序列化
data, err := json.Marshal(m)
if err != nil{
fmt.Println("failed!", err)
return
}
fmt.Printf("%s\n",data)
}
代码运行结果
[root@launch-wind day09]# go run args.go
{"Age":21,"Nickname":"qpy","Sex":1,"Username":"echoqian"}
切片的序列化
package main
import (
"fmt"
"encoding/json"
)
func main(){
//每个元素是map的slice
var s []map[string]interface{}
var m map[string]interface{}
m = make(map[string]interface{})
m["Username"] = "echoqian"
m["Nickname"] = "qpy"
m["Age"] = 21
m["Sex"] = 1
s = append(s,m)
//再追加一个map到slice里面
m = make(map[string]interface{})
m["Username"] = "bobo陈"
m["Nickname"] = "hah"
m["Age"] = 25
m["Sex"] = 0
s = append(s,m)
//slice的序列化
data, err := json.Marshal(s)
if err != nil{
fmt.Println("failed!", err)
return
}
fmt.Printf("%s\n",data)
}
代码运行结果
[root@launch-wind day09]# go run args.go
[{"Age":21,"Nickname":"qpy","Sex":1,"Username":"echoqian"},{"Age":25,"Nickname":"hah","Sex":0,"Username":"bobo?.}]
反序列化(把json数据转成成自己想要的数据)
将json数据反序列化为结构体形式
package main
import (
"fmt"
"encoding/json"
)
type User struct{
Username string
Nickname string
Age int
Birth string
Sex int
Email string
Phone string
}
//error是一种错误的类型
func testStruct() (ret string, err error) {
user1 := &User{
Username:"echo",
Nickname:"qian",
Age:22,
Birth:"0324",
Sex:1,
Email:"echoqian@qq.com",
Phone:"18821690781",
}
//结构体的序列化
data, err := json.Marshal(user1)
if err != nil{
err = fmt.Errorf("failed!", err)
return
}
ret = string(data)
return
}
func test(){
//得到一个json格式的数据
data, err := testStruct()
if err != nil{
fmt.Println("test struct error")
return
}
//json序列化成为一个struct
var user1 User
json.Unmarshal([]byte(data), &user1)
fmt.Println(user1)
}
func main(){
test()
}
代码运行结果
[root@launch-wind day09]# go run json.go
{echo qian 22 0324 1 echoqian@qq.com 18821690781}
将json数据反序列化成为一个map,
json.Unmarshal([]byte(data), m) 此处传递引用就足够