如何在golang中使用Json序列化

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

go自带json库

如何在golang中使用Json序列化

"encoding/json"官当自带

json-iterator

号称最快的go json解析器。跟官方的写法兼容,我目前基本都使用这个。

github.com/json-iterator/go

效率对比

ns 纳秒 op 操作

ns/opallocation bytesallocation times
std decode35510 ns/op1960 B/op99 allocs/op
easyjson decode8499 ns/op160 B/op4 allocs/op
jsoniter decode5623 ns/op160 B/op3 allocs/op
std encode2213 ns/op712 B/op5 allocs/op
easyjson encode883 ns/op576 B/op3 allocs/op
jsoniter encode837 ns/op384 B/op4 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序列化就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-03-26 01:51:13
收藏
分享
海报
0 条评论
167
上一篇:怎么在Java中对DBeaver进行配置 下一篇:易语言中的绝对取整命令是什么
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码