如何解码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.ParseFloat
parsing:
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) }