Conserver les zéros de fin dans la sortie JSON pour les nombres à virgule flottante
Dans Go, la fonction json.Marshal() est couramment utilisée pour la sérialisation structures de données au format JSON. Cependant, il a tendance à supprimer les zéros de fin des nombres à virgule flottante pendant le processus de conversion. Cela peut poser un problème si l'application consommatrice s'attend à ce que les nombres aient des zéros à droite.
Pour résoudre ce problème, une approche consiste à créer un type à virgule flottante personnalisé qui implémente l'interface json.Marshaler. Cela vous permet de définir comment le type est sérialisé en JSON. Voici un exemple d'implémentation :
type KeepZero float64 func (f KeepZero) MarshalJSON() ([]byte, error) { if float64(f) == float64(int(f)) { return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil } return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil }
Dans ce code :
Pour utiliser le type KeepZero, vous pouvez remplacer le champ float64 d'origine dans votre structure de données par un champ KeepZero. Par exemple :
type Pt struct { Value KeepZero Unit string }
Lorsque vous appelez json.Marshal sur un objet Pt, le champ Valeur sera sérialisé à l'aide de la méthode MarshalJSON personnalisée, en préservant le zéro final si nécessaire.
data, err := json.Marshal(Pt{40.0, "some_string"}) fmt.Println(string(data), err)
Cela produira la sortie JSON suivante :
{"Value":40.0,"Unit":"some_string"}
Cette solution vous permet de conserver les zéros de fin dans vos nombres à virgule flottante lorsque en les sérialisant en JSON, comme l'exige l'application consommatrice.
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!