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ä.