Aller au contenu

Encodage et décodage JSON#

Introduction au format JSON#

  • JSON (JavaScript Object Notation) est un format d'échange de données largement adopté.
  • Il utilise une syntaxe de notation clé-valeur et est souvent utilisé pour transmettre des données sur le web.

Le package "encoding/json" de la bibliothèque standard#

  • Go fournit un package "encoding/json" pour le traitement des données JSON.
  • Ce package comprend des fonctions pour la sérialisation (marshalling) et la désérialisation (unmarshalling) des structures Go en JSON et vice versa.
  • Documentation officielle et détaillée du package : https://pkg.go.dev/encoding/json

Marshalling et Unmarshalling de données JSON#

  • Le marshalling est le processus de transformation de données Go en JSON. La fonction json.Marshal() est utilisée pour ce faire.
  • L'unmarshalling est l'opération inverse : il transforme les données JSON en données Go. La fonction json.Unmarshal() est utilisée pour ce faire.
  • Exemple de code :
package main
import (
  "encoding/json"
  "fmt"
)
type Person struct {
  Name string
  Age  int
}
func main() {
  p := Person{Name: "Alice", Age: 30}
  // Marshalling
  jsonData, err := json.Marshal(p)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(jsonData))
  // Unmarshalling
  var p2 Person
  err = json.Unmarshal(jsonData, &p2)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(p2)
}

Personnalisation de l'encodage et décodage avec des tags struct#

  • Les tags struct permettent de personnaliser l'encodage et le décodage JSON en Go.
  • Ils permettent notamment de spécifier le nom de la clé JSON pour un champ donné ou d'ignorer un champ.
  • Exemple de code :

type Person struct {
  Name string `json:"name"`
  Age  int    `json:"age"`
}
Dans cet exemple, le champ Name sera encodé en JSON sous le nom name et le champ Age sous le nom age.

Gérer les erreurs liées à l'encodage et décodage JSON#

  • Les erreurs lors du marshalling et unmarshalling peuvent être attrapées et gérées en Go.
  • Exemple de gestion d'erreurs :

jsonData, err := json.Marshal(p)
if err != nil {
  fmt.Println(err)
  return
}
Dans cet exemple, si une erreur se produit lors de l'encodage, elle est imprimée et la fonction est interrompue.