Le robuste package encoding/json
de Go simplifie la conversion des structs Go en JSON, un aspect crucial de la sérialisation des données, des interactions API et de la gestion des fichiers de configuration. Ce guide explore des techniques efficaces pour gérer divers scénarios, notamment les structs de base, les structures imbriquées et la mise en forme JSON personnalisée.
Table des matières
- Conversion de base d’un Struct en JSON
- Gestion des Structs Imbriqués
- Contrôle de la mise en forme de la sortie JSON
- Gestion robuste des erreurs
Conversion de base d’un Struct en JSON
Convertir un simple struct Go en JSON est simple à l’aide de la fonction json.Marshal()
. Illustrons avec un exemple de base :
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
person := Person{Name: "John Doe", Age: 30}
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println("Erreur :", err)
return
}
fmt.Println(string(jsonData))
}
Les tags json:"name"
et json:"age"
mappent les champs du struct aux clés JSON. json.Marshal()
renvoie une tranche d’octets, que nous convertissons en chaîne de caractères. Il est crucial de toujours vérifier les erreurs.
Gestion des Structs Imbriqués
L’élégance de json.Marshal()
s’étend aux structs imbriqués. Considérez cet exemple :
package main
import (
"encoding/json"
"fmt"
)
type Address struct {
Street string `json:"street"`
City string `json:"city"`
}
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Address Address `json:"address"`
}
func main() {
address := Address{Street: "123 Main St", City: "Anytown"}
person := Person{Name: "Jane Doe", Age: 25, Address: address}
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println("Erreur :", err)
return
}
fmt.Println(string(jsonData))
}
json.Marshal()
gère récursivement les structures imbriquées, créant la hiérarchie JSON appropriée.
Contrôle de la mise en forme de la sortie JSON
Pour une meilleure lisibilité, notamment avec des structures complexes, utilisez json.MarshalIndent()
:
package main
import (
"encoding/json"
"fmt"
)
// ... (structs Person et Address des exemples précédents) ...
func main() {
// ... (variable person des exemples précédents) ...
jsonData, err := json.MarshalIndent(person, "", " ")
if err != nil {
fmt.Println("Erreur :", err)
return
}
fmt.Println(string(jsonData))
}
Le deuxième argument est la chaîne d’indentation (ici, deux espaces). Cela produit une sortie JSON proprement formatée.
Gestion robuste des erreurs
Incorporez toujours une gestion complète des erreurs. Les exemples ci-dessus illustrent une approche de base ; dans le code de production, envisagez une gestion des erreurs plus sophistiquée, incluant potentiellement la journalisation et des types d’erreurs personnalisés.
Ce guide complet vous fournit les connaissances nécessaires pour convertir efficacement les structs Go en JSON, en gérant diverses complexités avec grâce et précision. N’oubliez pas qu’une gestion appropriée des erreurs est primordiale pour des applications robustes.