Maison > développement back-end > Golang > 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

藏色散人
Libérer: 2021-03-25 17:15:58
avant
2650 Les gens l'ont consulté

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" 官当自带
Copier après la connexion

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}
Copier après la connexion

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))
Copier après la connexion

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)
}
Copier après la connexion

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)
Copier après la connexion
<🎜>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)
Copier après la connexion

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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal