Home >Backend Development >Golang >Detailed explanation of the application of Json serialization in golang

Detailed explanation of the application of Json serialization in golang

藏色散人
藏色散人forward
2021-03-25 17:15:442647browse

The following is a detailed explanation of the application of Json serialization in golang from the golang tutorial column. I hope it will be helpful to friends in need!

Detailed explanation of the application of Json serialization in golang

About me

Golang’s operation of json serialization and deserialization is really uncomfortable, so I’m used to using advanced Language features, it will be difficult to switch to these native writing methods.

Not much BB, start recording.

Selection of serialization library

When writing a small demo or making a small tool without large-scale usage scenarios, it is the same whichever library is used, because Performance will not be obvious. But if it is used in actual projects and is accompanied by high concurrency, large capacity and other scenarios, I still recommend using json-iterator.

go comes with its own json library

"encoding/json" 官当自带

json-iterator

It is known as the fastest go json parser. It is compatible with the official writing method. I basically use this now.

github.com/json-iterator/go

Efficiency comparison

ns Nanosecond op operation


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

##Encoding case
type Hero struct {
    Name string
    Age int
    Birthday string
    Sal float64
    Skill string}

Serialization
hero := Hero{
    Name:     "小王",
    Age:      20,
    Birthday: "2021-02-23",
    Sal:      88.02,
    Skill:    "技能",}jsonStu, err := json.Marshalif err != nil {
    fmt.Println("生成json字}fmt.Println(string(jsonStu))

Deserialization

Structure struct
str := "{\"Name\":\"张三丰\",\"Age\":98,\"Birthday\":\"2001-09-21\",\"Sal\":3800.85,\"Skill\":\"武当剑法\"}"
var hero Hero
err := json.Unmarshal([]byte(str), &hero)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}

Structure array

Two methods, one is directly deserialized into a structure Array, another deserialization into slice, the content is map[string]interface{}

struct array

str := `[{"Name":"张三丰","Age":98,"Birthday":"2001-09-21","Sal":3800.85,"Skill":"武当剑法"},{"Name":"张无忌","Age":28,"Birthday":"2004-09-21","Sal":300.85,"Skill":"乾坤大挪移"}]`

var hero []Hero
err := json.Unmarshal([]byte(str), &hero)
if err != nil {
fmt.Printf("unmarshal err=%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
var slice []map[string]interface{}
//注意:反序列化map,不需要make,因为make操作被封装到Unmarshal函数
err := json.Unmarshal([]byte(str), &slice)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 slice=%v\n", slice)

The above is the detailed content of Detailed explanation of the application of Json serialization in golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete