Maison  >  Article  >  développement back-end  >  Explication détaillée de l'application de la sérialisation Json dans Golang

Explication détaillée de l'application de la sérialisation Json dans Golang

藏色散人
藏色散人avant
2021-03-25 17:15:442602parcourir

Ce qui suit est une explication détaillée de l'application de la sérialisation Json dans Golang à partir du Ce qui suit est une explication détaillée de l'application de la sérialisation Json dans Golang à partir du colonne tutoriel golang

J'espère qu'elle sera utile aux amis dans le besoin ! Explication détaillée de l'application de la sérialisation Json dans Golang

À propos de moi

Le fonctionnement de la sérialisation et de la désérialisation JSON par Golang est vraiment inconfortable, donc j'y suis habitué. , il sera difficile de passer à ces méthodes d’écriture natives.

Pas beaucoup de BB, commencez à enregistrer.

Sélection de la bibliothèque de sérialisationjson-iterator

Lors de l'écriture d'une petite démo ou de la création d'un petit outil sans scénario d'utilisation à grande échelle, il en est de même quelle que soit la bibliothèque utilisée, car Performance ne sera pas évident. Mais s'il est utilisé dans des projets réels et s'accompagne d'une concurrence élevée, d'une grande capacité et d'autres scénarios, je recommande quand même d'utiliser

.

go est livré avec la bibliothèque json
"encoding/json" 官当自带

json-iterator

est connu comme l'analyseur json go le plus rapide. Il est compatible avec la méthode d'écriture officielle que j'utilise actuellement.

github.com/json-iterator/go

Comparaison de l'efficacité


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
Opération opérationnelle en nanoseconde

Cas d'encodage
type Hero struct {
    Name string
    Age int
    Birthday string
    Sal float64
    Skill string}

Sérialisation
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))

Désérialisation

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)
}

Tableau de structure

Deux manières, l'une est directement désérialisée en tableau de structure, l'autre est désérialisée en tranche, le contenu est map[string]interface{ }

Tableau de structure

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)
tranche
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)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer