Go Encodage / décodage à l'aide des structures Go


Exemple

Supposons que nous ayons la struct suivante qui définit un type de City :

type City struct {  
    Name string  
    Temperature int  
}

Nous pouvons encoder / décoder les valeurs City en utilisant le package encoding/json .

Tout d'abord, nous devons utiliser les métadonnées Go pour indiquer à l'encodeur la correspondance entre les champs struct et les clés JSON.

type City struct {  
    Name string `json:"name"`  
    Temperature int `json:"temp"`  
    // IMPORTANT: only exported fields will be encoded/decoded  
    // Any field starting with a lower letter will be ignored  
}  

Pour garder cet exemple simple, nous déclarons une correspondance explicite entre les champs et les clés. Cependant, vous pouvez utiliser plusieurs variantes des métadonnées json: comme expliqué dans les documents .

IMPORTANT: seuls les champs exportés (champs avec nom de base) seront sérialisés / désérialisés. Par exemple, si vous nommez le champ t empérature il sera ignoré même si vous définissez l' json métadonnées.

Codage

Pour encoder une structure City , utilisez json.Marshal comme dans l'exemple de base:

// data to encode  
city := City{Name: "Rome", Temperature: 30}  
 
// encode the data  
bytes, err := json.Marshal(city)  
if err != nil {  
    panic(err)  
}  
 
fmt.Println(string(bytes))  
// {"name":"Rome","temp":30} 

Cour de récréation

Décodage

Pour décoder une structure City , utilisez json.Unmarshal comme dans l'exemple de base:

// data to decode  
bytes := []byte(`{"name":"Rome","temp":30}`)  
 
// initialize the container for the decoded data  
var city City  
 
// decode the data  
// notice the use of &city to pass the pointer to city  
if err := json.Unmarshal(bytes, &city); err != nil {  
    panic(err)  
}  
 
fmt.Println(city)  
// {Rome 30} 

Cour de récréation