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 !
À 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.
Sélection de la bibliothèque de sérialisationjson-iterator
"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 |
type Hero struct { Name string Age int Birthday string Sal float64 Skill string}
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))
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)
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!