Comment décoder JSON avec le type convert de ssortingng en float64 dans Golang?

Je dois décoder une chaîne JSON avec le nombre flottant comme:

{"name":"Galaxy Nexus", "price":"3460.00"} 

J’utilise le code Golang ci-dessous:

 package main import ( "encoding/json" "fmt" ) type Product struct { Name ssortingng Price float64 } 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) } } 

Quand je le lance, obtenez le résultat:

 json: cannot unmarshal ssortingng into Go value of type float64 {Name:Galaxy Nexus Price:0} 

Je veux savoir comment décoder la chaîne JSON avec le type convert.

La réponse est beaucoup moins compliquée. Il suffit d’append dire à l’interpète JSON, c’est une chaîne encodée float64 avec ,ssortingng (notez que j’ai seulement modifié la définition du Price ):

 package main import ( "encoding/json" "fmt" ) type Product struct { Name ssortingng Price float64 `json:",ssortingng"` } 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) } } 

Passer une valeur entre guillemets ressemble à une chaîne. Changer "price":"3460.00" à "price":3460.00 et tout fonctionne bien.

Si vous ne pouvez pas supprimer les guillemets, vous devez l’parsingr vous-même, en utilisant strconv.ParseFloat :

 package main import ( "encoding/json" "fmt" "strconv" ) type Product struct { Name ssortingng Price ssortingng PriceFloat float64 } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { pro.PriceFloat, err = strconv.ParseFloat(pro.Price, 64) if err != nil { fmt.Println(err) } fmt.Printf("%+v\n", pro) } else { fmt.Println(err) fmt.Printf("%+v\n", pro) } } 

Juste pour vous faire savoir que vous pouvez le faire sans Unmarshal et utiliser json.decode . Voici Go Playground

 package main import ( "encoding/json" "fmt" "ssortingngs" ) type Product struct { Name ssortingng `json:"name"` Price float64 `json:"price,ssortingng"` } func main() { s := `{"name":"Galaxy Nexus","price":"3460.00"}` var pro Product err := json.NewDecoder(ssortingngs.NewReader(s)).Decode(&pro) if err != nil { fmt.Println(err) return } fmt.Println(pro) }