Go:
Työskentely JSONin kanssa
Kuinka:
Go:ssa encoding/json
-paketti on porttisi JSON-käsittelyyn, tarjoten mekanismeja muuntaa Go:n tietorakenteita JSON:ksi (marsalkointi) ja takaisin (unmarsalkointi). Alla on perusesimerkkejä, jotka auttavat sinut alkuun:
Koodaus (Marsalkointi)
Go:n tietueen muuntamiseksi JSON:ksi voit käyttää json.Marshal
. Harkitse seuraavaa Go:n tietuetta:
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))
}
Tuloste:
{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}
Purku (Unmarsalkointi)
JSON:n jäsentämiseksi Go:n tietorakenteeksi, käytä 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)
}
Käyttäen aiemmin määriteltyä User
-tietuetta, tämä koodi jäsentää JSON-merkkijonon User-instanssiksi.
Tuloste:
{ID:1 Username:JohnDoe Languages:[Go JavaScript Python]}
Syväsukellus
Go:n encoding/json
-paketti tarjoaa suoraviivaisen API:n, joka abstraktoi suurimman osan JSON-käsittelyn monimutkaisuudesta. Esitelty aikaisin Go:n kehityksessä, tämä paketti heijastaa Go:n filosofiaa yksinkertaisuudesta ja tehokkuudesta. Kuitenkin encoding/json
-paketin käyttö heijastusta (reflection) tietueiden tutkimiseen ja muokkaamiseen ajonaikaisesti voi johtaa vähemmän optimaaliseen suorituskykyyn CPU-intensiivisissä skenaarioissa.
Vaihtoehtoja kuten json-iterator/go
ja ffjson
on ilmestynyt, tarjoten nopeampaa JSON-käsittelyä generoimalla staattista marsalkointi- ja unmarsalkointikoodia. Kuitenkin encoding/json
pysyy yleisimmin käytettynä pakkauksena sen yksinkertaisuuden, vankkuuden ja sen tosiasian vuoksi, että se on osa standardikirjastoa, varmistaen yhteensopivuuden ja vakauden Go-versioiden läpi.
Huolimatta sen suhteellisesti hitaammasta suorituskyvystä, käyttöhelppous ja integraatio Go:n tyyppijärjestelmään tekevät encoding/json
sopivaksi useimpiin sovelluksiin. Niille, joilla suorituskyky on ensiarvoisen tärkeää, ulkoisten kirjastojen tutkiminen voi olla hyödyllistä, mutta monille standardikirjasto tarjoaa oikean tasapainon nopeuden, yksinkertaisuuden ja luotettavuuden välillä.