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
Susan Sarandonoriginal
2024-11-28 08:21:12538parcourir

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
}

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)
}

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

{"Value":40.0,"Unit":"some_string"}

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:
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