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.