Maison > développement back-end > Golang > Comment puis-je conserver les zéros de fin lors du marshaling des flotteurs vers JSON dans Go ?

Comment puis-je conserver les zéros de fin lors du marshaling des flotteurs vers JSON dans Go ?

Susan Sarandon
Libérer: 2024-11-28 08:21:12
original
571 Les gens l'ont consulté

How Can I Preserve Trailing Zeros When Marshaling Floats to JSON in Go?

JSON Marshal et Float Trailing Zeros

Problème :

Lors du marshaling des nombres flottants vers JSON en utilisant json.Marshal(), les zéros de fin sont supprimés, ce qui peut causer des problèmes lors de l'analyse du JSON avec des données externes. programmes.

Solution :

Pour conserver les zéros de fin dans la sortie JSON, une approche consiste à définir un type float personnalisé et à fournir une méthode MarshalJSON() personnalisée pour it.

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
}
Copier après la connexion

Dans cette implémentation :

  • Le type KeepZero enveloppe le type float64.
  • La méthode MarshalJSON() vérifie si le float est un entier (sans partie décimale). Si tel est le cas, il utilise la fonction strconv.FormatFloat() avec une précision de 1 décimale pour garantir que le zéro final est conservé.
  • Sinon, il utilise une précision de -1 pour éviter de spécifier un nombre fixe de décimales. lieux.

Exemple :

type Pt struct {
    Value KeepZero
    Unit  string
}

func main() {
    data, err := json.Marshal(Pt{40.0, "some_string"})
    fmt.Println(string(data), err)
}
Copier après la connexion

Ceci L'exemple produira la sortie JSON souhaitée :

{"Value":40.0,"Unit":"some_string"}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal