首页 > 后端开发 > Golang > 如何使用 Go 中存储为字符串的 Float64 值解码 JSON 字符串?

如何使用 Go 中存储为字符串的 Float64 值解码 JSON 字符串?

Linda Hamilton
发布: 2025-01-01 12:59:11
原创
188 人浏览过

How to Decode JSON Strings with Float64 Values Stored as Strings in Go?

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板