Maison > développement back-end > Golang > Comment décomposer les valeurs numériques JSON avec des exposants dans Golang ?

Comment décomposer les valeurs numériques JSON avec des exposants dans Golang ?

Mary-Kate Olsen
Libérer: 2024-11-15 10:31:02
original
1032 Les gens l'ont consulté

How to Unmarshal JSON Numeric Values with Exponents in Golang?

Golang Json Unmarshal Numeric with Exponent

Lors de la désagrégation d'une chaîne JSON dans une structure dans Golang, les valeurs numériques avec exposants sont souvent interprétées comme 0 . Cela peut être un défi, car les exposants font partie intégrante du JSON. spécification.

Pour résoudre ce problème, le type du champ numérique doit être modifié en float32 ou float64. Ces types à virgule flottante prennent en charge la représentation des exposants. Par exemple :

type Person struct {
    Id    float64          `json:"id"`
    _Id   int64             
    Name  string           `json:"name"`
}
Copier après la connexion

Après avoir modifié le type, la désagrégation de la chaîne JSON dans la structure analysera correctement la valeur numérique avec l'exposant.

Approche alternative avec une fonction d'assistance

Si vous avez besoin que le champ numérique soit un entier, vous pouvez utiliser une fonction d'assistance pour convertir le valeur à virgule flottante au type entier après démarshaling :

import (
    "encoding/json"
    "fmt"
    "math"
    "os"
    "reflect"
)

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

func main() {
    _ = json.Unmarshal(b, &f)

    if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) {
        fmt.Println(math.Trunc(f.Id))
        f._Id = int64(f.Id)
    }
}
Copier après la connexion

Dans cet exemple, la fonction d'assistance math.Trunc tronque la valeur à virgule flottante en un entier. La valeur tronquée est ensuite affectée au champ _Id.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal