Go:
Travailler avec JSON

Comment faire :

En Go, le package encoding/json est votre porte d’entrée pour la manipulation du JSON, offrant des mécanismes pour convertir les structures de données Go en JSON (marshalling) et vice versa (unmarshalling). Voici des exemples de base pour commencer :

Encodage (Marshalling)

Pour convertir une structure Go en JSON, vous pouvez utiliser json.Marshal. Considérez la structure Go suivante :

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type Utilisateur struct {
    ID        int      `json:"id"`
    NomUtilisateur  string   `json:"username"`
    Langages []string `json:"languages"`
}

func main() {
    utilisateur := Utilisateur{1, "JohnDoe", []string{"Go", "JavaScript", "Python"}}
    utilisateurJSON, err := json.Marshal(utilisateur)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(utilisateurJSON))
}

Sortie :

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

Décodage (Unmarshalling)

Pour analyser du JSON dans une structure de données Go, utilisez json.Unmarshal :

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

func main() {
    jsonStr := `{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}`
    var utilisateur Utilisateur
    err := json.Unmarshal([]byte(jsonStr), &utilisateur)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%+v\n", utilisateur)
}

Étant donné la structure Utilisateur comme auparavant, ce code analyse la chaîne JSON en une instance Utilisateur.

Sortie :

{ID:1 NomUtilisateur:JohnDoe Langages:[Go JavaScript Python]}

Plongée Profonde

Le package encoding/json en Go propose une API simple qui abstrait une grande partie de la complexité impliquée dans la manipulation JSON. Introduit dès les débuts du développement de Go, ce package reflète la philosophie de Go de simplicité et d’efficacité. Cependant, l’utilisation de la réflexion par encoding/json pour inspecter et modifier les structures à l’exécution peut conduire à des performances sous-optimales dans les scénarios intensifs en CPU.

Des alternatives comme json-iterator/go et ffjson ont émergé, offrant un traitement JSON plus rapide en générant du code statique de marshalling et unmarshalling. Néanmoins, encoding/json reste le package le plus utilisé en raison de sa simplicité, sa robustesse et le fait qu’il fait partie de la bibliothèque standard, assurant compatibilité et stabilité à travers les versions de Go.

Malgré sa performance relative plus lente, la facilité d’utilisation et l’intégration avec le système de typage de Go rendent encoding/json adapté pour la plupart des applications. Pour ceux qui travaillent dans des contextes où la performance est primordiale, explorer des bibliothèques externes peut valoir la peine, mais pour beaucoup, la bibliothèque standard offre le bon équilibre entre vitesse, simplicité et fiabilité.