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
Mary-Kate Olsenoriginal
2024-11-15 10:31:021033parcourir

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

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

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!

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