目录
三、反序列化(将json转换为go代码能识别的结构体、map、切片)
一、概括
JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式,现在是主流的数据格式,常用于web
开发中前端与后端进行数据交互的一种方式
二、在go
中常见的几种序列化成json
的方式
1、将结构体序列化成json
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string `json:"name"` // 姓名
Age int `json:"age"` // 年龄
Gender string `json:"gender"` // 性别
score float64 `json:"score"` // 分数
Course []string `json:"course"` // 课程
}
func main() {
stu := Student{
"张三",20,"男",78.6,[]string{"语文","数学","音乐"},}
fmt.Println(stu)
data,err := json.Marshal(&stu)
if err != nil {
fmt.Println("序列化错误",err)
} else {
fmt.Println(string(data))
}
}
// 返回结果:{"name":"张三","age":20,"gender":"男","score":78.6,"course":["语文","音乐"]}
复制代码
2、将map
序列化为json
package main
import (
"encoding/json"
"fmt"
)
func main() {
var map1 map[string]interface{} // 使用一个空接口表示可以是任意类型
map1 = make(map[string]interface{})
map1["name"] = "张三"
map1["province"] = "广东省"
map1["city"] = "深圳市"
map1["salary"] = 1000
map1["hobby"] = [...]string{"看书","旅游","学习"}
data,err := json.Marshal(map1)
if err != nil {
fmt.Println("序列化失败")
} else {
fmt.Println(string(data))
}
}
复制代码
3、切片序列化成json
package main
import (
"encoding/json"
"fmt"
)
func main() {
var slice1 []map[string]interface{}
var m1 map[string]interface{}
m1 = make(map[string]interface{})
m1["name"] = "张三"
m1["address"] = "广东省深圳市"
slice1 = append(slice1,m1)
var m2 map[string]interface{}
m2 = make(map[string]interface{})
m2["name"] = "李四"
m2["address"] = "广东省广州市"
slice1 = append(slice1,m2)
data,err := json.Marshal(slice1)
if err != nil {
fmt.Println("序列化错误")
} else {
fmt.Println(string(data))
}
}
复制代码
三、反序列化(将json
转换为go
代码能识别的结构体、map
、切片)
1、json
反序列化成结构体
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string `json:"name"` // 姓名
Age int `json:"age"` // 年龄
Gender string `json:"gender"` // 性别
score float64 `json:"score"` // 分数
Course []string `json:"course"` // 课程
}
func main() {
var stu Student
str := `{"name":"张三","音乐"]}`
err := json.Unmarshal([]byte(str),&stu)
if err != nil {
fmt.Println("反序列化失败")
}
fmt.Println(stu)
}
复制代码
2、json
反序列化成map
package main
import (
"encoding/json"
"fmt"
)
func main() {
var map1 map[string]interface{} // 使用一个空接口表示可以是任意类型
//map1 = make(map[string]interface{})
str := `{"city":"深圳市","hobby":["看书","学习"],"name":"张三","province":"广东省","salary":1000}`
err := json.Unmarshal([]byte(str),&map1)
if err != nil {
fmt.Println("反序列化失败",err)
}
fmt.Println(map1)
}
复制代码
3、切片反序列化
package main
import (
"encoding/json"
"fmt"
)
func main() {
var slice []map[string]interface{}
str := `[{"address":"广东省深圳市","name":"张三"},{"address":"广东省广州市","name":"李四"}]`
err := json.Unmarshal([]byte(str),&slice)
if err != nil {
fmt.Printf("unmarshal err=%v\n",err) }
fmt.Printf("反序列化后 slice=%v\n",slice)
}
复制代码
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。