Go:
Lavorare con JSON

Come fare:

In Go, il pacchetto encoding/json è il tuo accesso alla manipolazione di JSON, fornendo meccanismi per convertire le strutture dati di Go in JSON (marshalling) e viceversa (unmarshalling). Di seguito sono riportati esempi basilari per iniziare:

Codifica (Marshalling)

Per convertire una struct di Go in JSON, puoi utilizzare json.Marshal. Considera la seguente struct di Go:

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))
}

Output:

{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}

Decodifica (Unmarshalling)

Per analizzare JSON in una struttura dati di Go, usa 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)
}

Dato lo struct User come prima, questo codice analizza la stringa JSON in un’istanza User.

Output:

{ID:1 Username:JohnDoe Languages:[Go JavaScript Python]}

Approfondimento

Il pacchetto encoding/json in Go offre un’API semplice che astrae gran parte della complessità coinvolta nella manipolazione di JSON. Introdotto all’inizio dello sviluppo di Go, questo pacchetto riflette la filosofia di Go di semplicità ed efficienza. Tuttavia, l’uso della riflessione da parte di encoding/json per ispezionare e modificare le struct in tempo di esecuzione può portare a prestazioni meno che ottimali in scenari intensivi sulla CPU.

Alternative come json-iterator/go e ffjson sono emerse, fornendo un’elaborazione JSON più rapida tramite la generazione di codice statico di marshalling e unmarshalling. Tuttavia, encoding/json rimane il pacchetto più comunemente utilizzato a causa della sua semplicità, robustezza e del fatto che fa parte della libreria standard, garantendo compatibilità e stabilità attraverso le versioni di Go.

Nonostante le sue prestazioni relative più lente, la facilità d’uso e l’integrazione con il sistema di tipi di Go rendono encoding/json adatto alla maggior parte delle applicazioni. Per coloro che lavorano in contesti in cui la performance è fondamentale, esplorare le librerie esterne può essere utile, ma per molti, la libreria standard offre il giusto equilibrio tra velocità, semplicità e affidabilità.