Maison > développement back-end > Golang > Comment décoder des chaînes JSON avec des valeurs Float64 stockées sous forme de chaînes dans Go ?

Comment décoder des chaînes JSON avec des valeurs Float64 stockées sous forme de chaînes dans Go ?

Linda Hamilton
Libérer: 2025-01-01 12:59:11
original
198 Les gens l'ont consulté

How to Decode JSON Strings with Float64 Values Stored as Strings in Go?

Décodage de JSON avec conversion de type de chaîne en float64 dans Go

L'analyse des chaînes JSON contenant des valeurs float64 peut poser des problèmes lorsque les valeurs sont stockées comme des chaînes. Pour résoudre ce problème, Go propose une solution simple.

Comprendre l'erreur :

Lors de la tentative de décodage d'une chaîne JSON telle que "{"name":Galaxy Nexus ", "price": "3460.00"}" en utilisant la fonction json.Unmarshal, vous pourriez rencontrer ce qui suit erreur :

json: cannot unmarshal string into Go value of type float64
Copier après la connexion

Cette erreur se produit car le décodeur JSON tente de convertir directement la représentation sous forme de chaîne du nombre float64 en une valeur float64, ce qui n'est pas pris en charge.

Solution : Annotation de conversion de type

Pour résoudre ce problème, vous devez demander explicitement au décodeur de traiter la chaîne comme un float64 à l'aide d'un tapez l'annotation de conversion. Cette annotation est ajoutée à la définition du champ dans la structure Product :

type Product struct {
    Name  string
    Price float64 `json:",string"`
}
Copier après la connexion

La balise ",string" indique au décodeur JSON que le champ Price est une chaîne qui doit être convertie en float64.

Code mis à jour :

Voici le code Go mis à jour code :

package main

import (
    "encoding/json"
    "fmt"
)

type Product struct {
    Name  string
    Price float64 `json:",string"`
}

func main() {
    s := `{"name":"Galaxy Nexus", "price":"3460.00"}`
    var pro Product
    err := json.Unmarshal([]byte(s), &pro)
    if err == nil {
        fmt.Printf("%+v\n", pro)
    } else {
        fmt.Println(err)
        fmt.Printf("%+v\n", pro)
    }
}
Copier après la connexion

Sortie attendue :

L'exécution de ce code produira le résultat attendu :

{Name:Galaxy Nexus Price:3460}
Copier après la connexion

La fonction json.Unmarshal a réussi a décodé la chaîne JSON et converti le prix d'une chaîne en float64.

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