序列化
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string `json:"用户名"`//反射机制
Age int `json:"年龄"`
Sex string `json:"性别"`
}
func json_Struct() {
u:=User{"Jack",23,"男"}
data,err:=json.Marshal(&u)
if err!=nil{
fmt.Println("出错!")
return
}
fmt.Printf("序列化后=%v
", string(data))
}
func json_Map(){
mp:=map[string]int{
"Jack":21,
"Amy":23,
"David":89,
}
data,err:=json.Marshal(&mp)
if err!=nil{
fmt.Println("出错!")
}
fmt.Println(string(data))
}
func json_Slice(){
arr:=[]map[string]interface{}{
{"jack":21},{"tom":23},{"Mg":24},
}
data,err:=json.Marshal(&arr)
if err!=nil{
fmt.Println("出错!")
}
fmt.Println(string(data))
}
func main() {
json_Struct()
json_Map()
json_Slice()
arr:=[...]int{1,2,3,4}
data,err:=json.Marshal(&arr)
if err!=nil{
fmt.Println("出错!")
}
fmt.Println(string(data))
}
反序列化
package main
import ( "fmt"
"encoding/json"
)
//定义一个结构体
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 := json.Unmarshal([]byte(str), &monster)
if err != nil {
fmt.Printf("unmarshal err=%v
", err)
}
fmt.Printf("反序列化后 monster=%v monster.Name=%v
", monster, monster.Name)
}
//演示将 json 字符串,反序列化成 map
func unmarshalMap() {
str := "{"address":"洪崖洞","age":30,"name":"红孩儿"}"
//定义一个 map
var a map[string]interface{}
//反序列化
//注意:反序列化 map,不需要 make,因为 make 操作被封装到 Unmarshal 函数
err := json.Unmarshal([]byte(str), &a)
if err != nil {
fmt.Printf("unmarshal err=%v
", err)
}
fmt.Printf("反序列化后 a=%v
", 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 := json.Unmarshal([]byte(str), &slice)
if err != nil {
fmt.Printf("unmarshal err=%v
", err)
}
fmt.Printf("反序列化后 slice=%v
", slice)
}
func main() {
unmarshalStruct()
unmarshalMap()
unmarshalSlice()
}