Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Anwendung der Json-Serialisierung in Golang

Detaillierte Erläuterung der Anwendung der Json-Serialisierung in Golang

藏色散人
藏色散人nach vorne
2021-03-25 17:15:442590Durchsuche

Über mich

Detaillierte Erläuterung der Anwendung der Json-Serialisierung in GolangGolangs JSON-Serialisierungs- und Deserialisierungsvorgänge sind wirklich umständlich. Wenn Sie also an Hochsprachenfunktionen gewöhnt sind, wird es unangenehm sein, auf diese eher nativen Schreibmethoden umzusteigen.

Keine BBs mehr, beginnen Sie mit der Aufnahme.

Auswahl der Serialisierungsbibliothek

Wenn Sie eine kleine Demo schreiben oder ein kleines Tool ohne groß angelegte Nutzungsszenarien erstellen, ist die verwendete Bibliothek dieselbe, da die Leistung nicht offensichtlich ist. Wenn es jedoch in tatsächlichen Projekten verwendet wird und mit hoher Parallelität, großer Kapazität und anderen Szenarien einhergeht, empfehle ich dennoch die Verwendung

.

go verfügt über eine eigene JSON-Bibliothek

"encoding/json" 官当自带
json-iterator

json-iterator, bekannt als der schnellste Go-JSON-Parser. Es ist mit der offiziellen Schreibmethode kompatibel, die ich jetzt verwende.

github.com/json-iterator/go

Effizienzvergleich

ns Nanosekunden-Betriebsvorgang

ns/opZuordnungsbytesjsoniter-Dekodierung 5623 ns/op160 B/op3 Zuweisungen/opStandardkodierung2213 ns/op712 B/op5. Zuweisungen/opeasyj Sohn kodieren883 ns /op576 B/op3 Zuweisungen/opjsoniter encode837 ns/op384 B/op4 Zuweisungen/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))
Deserialisierung
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)
}
Struktur-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)

Zuteilungszeiten
Standarddekodierung 35510 ns/op
Coding Case Serialisierung
struct structstructure array Zwei Möglichkeiten: Eine wird direkt in ein Strukturarray deserialisiert, die andere wird in ein Slice deserialisiert, der Inhalt ist eine Map[string]-Schnittstelle {}
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)

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Anwendung der Json-Serialisierung in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen