在 Go 中使用从 String 到 float64 的类型转换来解码 JSON
解析包含 float64 值的 JSON 字符串在存储值时可能会带来挑战作为字符串。为了解决这个问题,Go 提供了一个简单的解决方案。
理解错误:
当尝试解码像 "{"name":"Galaxy Nexus 这样的 JSON 字符串时", "price":"3460.00"}" 使用 json.Unmarshal 函数,你可能会遇到以下情况错误:
json: cannot unmarshal string into Go value of type float64
出现此错误是因为 JSON 解码器尝试将 float64 数字的字符串表示形式直接转换为 float64 值,但不支持这种方式。
解决方案:类型转换注解
要解决此问题,需要显式指示解码器将字符串视为 float64使用类型转换注释。此注释被添加到 Product 结构中的字段定义中:
type Product struct { Name string Price float64 `json:",string"` }
“,string”标签告诉 JSON 解码器 Price 字段是一个应该转换为 float64 的字符串。
更新的代码:
这是更新的 Go代码:
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) } }
预期输出:
运行此代码将产生预期输出:
{Name:Galaxy Nexus Price:3460}
json.Unmarshal 函数成功解码 JSON 字符串并将价格从字符串转换为 float64。
以上是如何使用 Go 中存储为字符串的 Float64 值解码 JSON 字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!