0Pricing
Go Academy · Leçon

Récapitulatif de encoding/json

Sérialiser et désérialiser du JSON

Récapitulatif de encoding/json est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

JSON en Go

JSON est le format de données le plus courant pour les API. Le paquet standard encoding/json de Go convertit les valeurs Go en texte JSON et inversement.

Marshal : de Go vers JSON

json.Marshal transforme une valeur Go en tranche d’octets JSON. Convertissez-la en chaîne pour l’afficher.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1, "b": 2}
	b, _ := json.Marshal(data)
	fmt.Println(string(b))
}

Sérialiser une structure

Les structures sont sérialisées champ par champ. Les champs exportés deviennent des clés JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Unmarshal : de JSON vers Go

json.Unmarshal analyse des octets JSON pour les placer dans une valeur Go. Transmettez un pointeur afin que la fonction puisse remplir votre variable.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var u User
	json.Unmarshal([]byte("{\"Name\":\"Bob\",\"Age\":25}"), &u)
	fmt.Println(u)
}

Balises pour les noms de clés

Utilisez des balises json pour contrôler les noms de clés, comme vu précédemment. Ici, Name correspond au nom de clé JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	b, _ := json.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

Vérifiez toujours les erreurs

Marshal et Unmarshal renvoient tous deux une erreur. Dans du code réel, ne l’ignorez jamais : un JSON mal formé ou des types non pris en charge produisent des erreurs.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v int
	err := json.Unmarshal([]byte("not json"), &v)
	fmt.Println(err)
}

Décoder dans des tables associatives

Lorsque vous ne connaissez pas la structure à l’avance, désérialisez les données dans map[string]interface{}.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var m map[string]interface{}
	json.Unmarshal([]byte("{\"x\":1,\"y\":\"hi\"}"), &m)
	fmt.Println(m["x"], m["y"])
}

Tranches et tableaux

Les tableaux JSON correspondent aux tranches Go. La sérialisation d’une tranche produit un tableau JSON.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	b, _ := json.Marshal([]string{"a", "b", "c"})
	fmt.Println(string(b))
}

Affichage indenté

json.MarshalIndent ajoute une indentation pour obtenir une sortie lisible par les utilisateurs.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1}
	b, _ := json.MarshalIndent(data, "", "  ")
	fmt.Println(string(b))
}

Les nombres sont des float64

Lors du décodage dans interface{}, tous les nombres JSON deviennent des float64 en Go. Convertissez-les explicitement si vous avez besoin d’un int.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v interface{}
	json.Unmarshal([]byte("42"), &v)
	fmt.Printf("%T %v\n", v, v)
}

Aller-retour

Vous pouvez sérialiser, puis désérialiser les données pour les copier au moyen de JSON. Les valeurs restent intactes pour les types pris en charge.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	orig := []int{1, 2, 3}
	b, _ := json.Marshal(orig)
	var back []int
	json.Unmarshal(b, &back)
	fmt.Println(back)
}

Vérification rapide

Pourquoi devez-vous transmettre un pointeur à json.Unmarshal ?

Récapitulatif

encoding/json :

  • json.Marshal transforme les valeurs Go en JSON
  • json.Unmarshal analyse le JSON dans un pointeur
  • Les balises renomment les clés ; les nombres sont décodés en float64 dans interface{}
  • Vérifiez toujours l’erreur renvoyée

Questions Fréquemment Posées

La leçon « Récapitulatif de encoding/json » est-elle gratuite ?

Oui — le texte complet de « Récapitulatif de encoding/json » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Récapitulatif de encoding/json » ?

Sérialiser et désérialiser du JSON Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Récapitulatif de encoding/json » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Récapitulatif de encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob et encodage binaire
← Retour à Go Academy