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 ?
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
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"` }
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) } }
Sortie attendue :
L'exécution de ce code produira le résultat attendu :
{Name:Galaxy Nexus Price:3460}
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!