Maison >développement back-end >Golang >Comment conserver les valeurs Int64 lors de l'analyse de JSON dans Go ?

Comment conserver les valeurs Int64 lors de l'analyse de JSON dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 16:36:18615parcourir

How to Preserve Int64 Values When Parsing JSON in Go?

Conserver les valeurs Int64 lors de l'analyse de JSON dans Go

Lors du traitement des requêtes JSON POST contenant des tableaux d'objets avec des valeurs int64, il est courant de rencontrer des problèmes de conversion. JSON.Unmarshal convertit automatiquement ces valeurs en float64, ce qui peut être gênant. Cet article explore des solutions pour préserver les valeurs int64 d'origine.

Solution 1 : Utilisation du type numérique

Le type json.Decoder inclut une méthode UseNumber qui vous permet de décoder les nombres dans un type personnalisé. En définissant un type Number qui représente un littéral numérique JSON, vous pouvez le reconvertir facilement en int64 :

func main() {
    body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}")
    var dat map[string]interface{}
    d := json.NewDecoder(bytes.NewBuffer(body))
    d.UseNumber()
    if err := d.Decode(&dat); err != nil {
        panic(err)
    }
    // ...
    n := tags[0].(map[string]interface{})["id"].(json.Number)
    i64, _ := strconv.ParseUint(string(n), 10, 64)
}

Solution 2 : décodage en structure personnalisée

Vous peut également décoder directement dans une structure spécifique adaptée à votre data :

type A struct {
    Tags []map[string]uint64
}
func main() {
    body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}")
    var a A
    if err := json.Unmarshal(body, &a); err != nil {
        panic(err)
    }
    // ...
    println(a.Tags[0]["id"])
}

Attention :

Notez que si votre application interagit avec JavaScript, qui ne prend en charge que les flottants double précision IEEE754, vous pouvez rencontrer des problèmes d'analyse avec les valeurs int64 .

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