这篇文章给大家介绍如何在golang中使用Json序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
go自带json库

"encoding/json"官当自带
json-iterator
号称最快的go json解析器。跟官方的写法兼容,我目前基本都使用这个。
github.com/json-iterator/go
效率对比
ns 纳秒 op 操作
| ns/op | allocation bytes | allocation times |
---|
std decode | 35510 ns/op | 1960 B/op | 99 allocs/op |
easyjson decode | 8499 ns/op | 160 B/op | 4 allocs/op |
jsoniter decode | 5623 ns/op | 160 B/op | 3 allocs/op |
std encode | 2213 ns/op | 712 B/op | 5 allocs/op |
easyjson encode | 883 ns/op | 576 B/op | 3 allocs/op |
jsoniter encode | 837 ns/op | 384 B/op | 4 allocs/op |
编码案例
typeHerostruct{
Namestring
Ageint
Birthdaystring
Salfloat64
Skillstring}
序列化
hero:=Hero{
Name:"小王",
Age:20,
Birthday:"2021-02-23",
Sal:88.02,
Skill:"技能",}jsonStu,err:=json.Marshaliferr!=nil{
fmt.Println("生成json字}fmt.Println(string(jsonStu))
反序列化
结构体 struct
str:="{\"Name\":\"张三丰\",\"Age\":98,\"Birthday\":\"2001-09-21\",\"Sal\":3800.85,\"Skill\":\"武当剑法\"}"
varheroHero
err:=json.Unmarshal([]byte(str),&hero)
iferr!=nil{
fmt.Printf("unmarshalerr=%v\n",err)
}
结构体数组
俩种方式,一种直接反序列化成 结构体数组,另一种反序列化为 slice,内容为map[string]interface{}
结构体数组
str:=`[{"Name":"张三丰","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武当剑法"},{"Name":"张无忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`
varhero[]Hero
err:=json.Unmarshal([]byte(str),&hero)
iferr!=nil{
fmt.Printf("unmarshalerr=%v\n",err)
}
fmt.Printf("反序列化后hero=%v",hero)
slice
str:=`[{"Name":"张三丰","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武当剑法"},{"Name":"张无忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`
//定义一个slice
varslice[]map[string]interface{}
//注意:反序列化map,不需要make,因为make操作被封装到Unmarshal函数
err:=json.Unmarshal([]byte(str),&slice)
iferr!=nil{
fmt.Printf("unmarshalerr=%v\n",err)
}
fmt.Printf("反序列化后slice=%v\n",slice)
关于如何在golang中使用Json序列化就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。