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
Linda Hamiltonoriginal
2025-01-01 12:59:11190parcourir

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

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!

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