Maison >développement back-end >Golang >Comment gérer les chiffres JSON avec des exposants dans Go ?
Lors de la désagrégation des données JSON dans une structure Go, les valeurs numériques avec exposants sont souvent interprétées à tort comme zéro. Cela se produit lorsque le champ cible dans la structure est déclaré comme un type entier.
Pour résoudre ce problème, suivez ces étapes :
type Person struct { Id float32 `json:"id"` Name string `json:"name"` }
Voici un exemple :
package main import ( "encoding/json" "fmt" "os" ) type Person struct { Id float32 `json:"id"` Name string `json:"name"` } func main() { // Create the JSON string. var b = []byte(`{"id": 1.2E+8, "Name": "Fernando"}`) // Unmarshal the JSON to a proper struct. var f Person json.Unmarshal(b, &f) // Print the person. fmt.Println(f) // Unmarshal the struct to JSON. result, _ := json.Marshal(f) // Print the JSON. os.Stdout.Write(result) }
Cela affichera :
{1.2e+08 Fernando} {"id":1.2e+08,"Name":"Fernando"}
Approche alternative :
Si vous devez utiliser un type entier pour le champ, vous pouvez utiliser un champ "factice" de type float64 pour capturer la valeur numérique avec exposant. Ensuite, utilisez un hook pour convertir la valeur en type entier réel.
Voici un exemple :
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` } var f Person var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`) _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(f.Id) f._Id = int64(f.Id) }
Cela affichera :
1.2e+08 {Name:Fernando Id:120000000}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!