Go:
Att Arbeta med JSON
Hur man gör:
I Go är paketet encoding/json
din ingång till manipulation av JSON, och tillhandahåller mekanismer för att konvertera Go-datastrukturer till JSON (marshalling) och tillbaka (unmarshalling). Nedan följer grundläggande exempel för att komma igång:
Kodning (Marshalling)
För att konvertera en Go struct till JSON, kan du använda json.Marshal
. Betrakta följande Go struct:
package main
import (
"encoding/json"
"fmt"
"log"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Languages []string `json:"languages"`
}
func main() {
user := User{1, "JohnDoe", []string{"Go", "JavaScript", "Python"}}
userJSON, err := json.Marshal(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(userJSON))
}
Utskrift:
{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}
Avkodning (Unmarshalling)
För att tolka JSON till en Go datastruktur, använd json.Unmarshal
:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
jsonStr := `{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}`
var user User
err := json.Unmarshal([]byte(jsonStr), &user)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", user)
}
Givet struct User
som tidigare, tolkar denna kod JSON-strängen till en User-instans.
Utskrift:
{ID:1 Username:JohnDoe Languages:[Go JavaScript Python]}
Djupdykning
Paketet encoding/json
i Go erbjuder ett rakt på sak API som abstraherar mycket av komplexiteten involverad i JSON-manipulation. Introducerat tidigt i Gos utveckling, reflekterar detta paket Gofilosofi av enkelhet och effektivitet. Dock kan användningen av reflektion av encoding/json
för att inspektera och modifiera strukturer vid körning leda till prestanda som är mindre än optimal i CPU-intensiva scenarier.
Alternativ som json-iterator/go
och ffjson
har dykt upp och erbjuder snabbare JSON-behandling genom att generera statisk kod för marshalling och unmarshalling. Dock är encoding/json
fortfarande det mest använda paketet på grund av sin enkelhet, robusthet och det faktum att det ingår i standardbiblioteket, vilket säkerställer kompatibilitet och stabilitet över Go-versioner.
Trots sin långsammare relativa prestanda, gör användarvänligheten och integrationen med Gos typsystem att encoding/json
passar för de flesta applikationer. För de som arbetar i sammanhang där prestanda är av högsta vikt, kan det vara värt att utforska externa bibliotek, men för många lyckas standardbiblioteket uppnå en bra balans mellan hastighet, enkelhet och pålitlighet.