Go语言之JSON序列化(二十三)
2023-06-13 09:12:23 时间
Go语言之JSON序列化
- 序列化(
func Marshal(v interface{})([]byte, error)
)- 结构体序列化
- Map序列化
- Tag (
加了Tag,结构体就会映射你序列化以及反序列化的key
)
json_demo.go文件
package json_demo
import (
"encoding/json"
"fmt"
)
type Serve struct {
ServeName string `json:"name"` //`json:"serve_name"` 加Tag
ServeIp string `json:"ip"`
ServePort int `json:"port"`
}
//结构体转化为json
func SerializeStruct() {
serve := new(Serve) //创建
serve.ServeName = "json-demo-struct"
serve.ServeIp = "127.0.0.1"
serve.ServePort = 8080
b,err := json.Marshal(serve) //序列化成json字节数组
if err != nil {
fmt.Println("Marshal err:", err.Error())
return
}
//将json字节数组转化为string
fmt.Println("Marshal json:",string(b))
//结果:Marshal json: {"ServeName":"json-demo","ServeIp":"127.0.0.1","ServePort":8080}
//加Tag:Marshal json: {"name":"json-demo-struct","ip":"127.0.0.1","port":8080}
}
func SerializeMap() {
serve := make(map[string]interface{}) //创建
serve["ServeName"] = "json-demo-map"
serve["ServeIp"] = "198.0.0.1"
serve["ServePort"] = 8090
b,err := json.Marshal(serve) //序列化成json字节数组
if err != nil {
fmt.Println("Marshal err:", err.Error())
return
}
//将json字节数组转化为string
fmt.Println("Marshal json:",string(b))
//结果:Marshal json: {"ServeIp":"198.0.0.1","ServeName":"json-demo-map","ServePort":8090}
}
main.go文件
package main
import "./json_demo"
func main() {
json_demo.SerializeStruct()
json_demo.SerializeMap()
}
反序列化(func Unmarshal(data []byte, v interface{}) error
)
- 反序列化为结构体
-
反序列化为Map
json_demo.go文件
package json_demo
import (
"encoding/json"
"fmt"
)
type Serve struct {
ServeName string `json:"name"` //`json:"serve_name"` 加Tag
ServeIp string `json:"ip"`
ServePort int `json:"port"`
}
//json转化为结构体
func DeSerializeStruct() {
jsonString := `{"ip":"198.0.0.1","name":"json-demo-map","port":8090}`
serve := new(Serve)
err := json.Unmarshal([]byte(jsonString),&serve)
if err != nil{
fmt.Println("Unmarshal err:", err.Error())
return
}
fmt.Println("Unmarshal struct:", serve) //Unmarshal struct: &{json-demo-map 198.0.0.1 8090}
}
//json转化为map
func DeSerializeMap() {
jsonString := `{"ServeIp":"198.0.0.1","ServeName":"json-demo-map","ServePort":8090}`
serve := make(map[string]interface{})
err := json.Unmarshal([]byte(jsonString),&serve)
if err != nil{
fmt.Println("Unmarshal err:", err.Error())
return
}
fmt.Println("Unmarshal map:", serve) //Unmarshal map: map[ServeIp:198.0.0.1 ServeName:json-demo-map ServePort:8090]
}
main.go文件
package main
import "./json_demo"
func main() {
json_demo.DeSerializeStruct()
json_demo.DeSerializeMap()
}
相关文章
- Go语言之控制语句(十一)
- 「Go工具箱」go语言csrf库的使用方式和实现原理
- 2022-07-26:以下go语言代码输出什么?A:5;B:hello;C:编译错误;D:运行错误。package mainim
- 2022-08-11:以下go语言代码输出什么?A:panic;B:编译错误;C:json marshal 报错;D:null;
- minio分布式存储的go语言开发衔接
- Go语言浮点类型(小数类型)
- Go语言函数类型实现接口——把函数作为接口来调用
- Go语言类型内嵌和结构体内嵌
- Go语言内嵌结构体成员名字冲突
- go test命令(Go语言测试命令)完全攻略
- go pprof命令(Go语言性能分析命令)完全攻略
- Go语言圣经–结构体,JSON习题详解编程语言
- Go语言圣经-Slice切片习题详解编程语言
- Go语言框架:Beego vs Gin 的区别详解编程语言
- Go语言将秒转换为具体的时间
- Go语言反射——性能和灵活性的双刃剑
- 精通Go语言开发Redis应用(go语言redis开发)
- 轻松搞定Go语言连接MySQL(go连接mysql)
- 关键字在SQL Server中利用GO关键字实现更优化的操作(sqlserver中go)
- Go语言查询Oracle数据库实战实例(go语言查询oracle)
- 数据库Go语言实现监控Oracle数据库(go监听oracle)
- 数据库Go语言连接Oracle数据库的指南(go如何连接oracle)
- 程序Go语言调用Oracle数据库驱动程序指南(go oracle驱动)