如何解码JSON的types从string转换为在Golang中的float64?

我需要解码一个JSONstring的浮点数如下:

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

我使用下面的Golang代码:

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

当我运行它时,得到结果:

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

我想知道如何解码types转换的JSONstring。

答案相当简单。 只要添加告诉JSON中断它是一个string编码float64与,string (注意,我只改变了Price定义):

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

在引号中传递一个值使得它看起来像string。 更改"price":"3460.00""price":3460.00 ,一切工作正常。

如果您不能删除引号,则必须使用strconv.ParseFloatparsing:

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

只是让你知道,你可以做到这一点没有Unmarshal和使用json.decode 。 这是Go游乐场

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