我调用第三方API,得到以下JSON:
{"amount":1.0282E+7}
字符串当我想转换它时,我得到了一个错误:Blocjson:无法将数字1.0282E+7解组到Go结构字段MiddleEastAccountToCardResponse中。int64类型的金额我想在Go中将这个JSON转换为以下结构:
type Response struct { Amount int64 `json:"amount"` }
型
fhity93d1#
既然你没有解释你想要的确切结果,我们只能猜测。但是你有三种通用的方法来实现这一点:1.解封为浮点类型而不是整数类型。如果你需要一个int,你可以稍后转换成一个int。1.解封为json.Number类型,该类型保留完整的JSON表示及其精度,并且可以根据需要转换为int或float。1.使用自定义的解组器,它可以为您从float类型转换为int类型。所有这三个都在这里演示:
json.Number
package main import ( "fmt" "encoding/json" ) const input = `{"amount":1.0282E+7}` type ResponseFloat struct { Amount float64 `json:"amount"` } type ResponseNumber struct { Amount json.Number `json:"amount"` } type ResponseCustom struct { Amount myCustomType `json:"amount"` } type myCustomType int64 func (c *myCustomType) UnmarshalJSON(p []byte) error { var f float64 if err := json.Unmarshal(p, &f); err != nil { return err } *c = myCustomType(f) return nil } func main() { var x ResponseFloat var y ResponseNumber var z ResponseCustom if err := json.Unmarshal([]byte(input), &x); err != nil { panic(err) } if err := json.Unmarshal([]byte(input), &y); err != nil { panic(err) } if err := json.Unmarshal([]byte(input), &z); err != nil { panic(err) } fmt.Println(x.Amount) fmt.Println(y.Amount) fmt.Println(z.Amount) }
字符串See it in the playground的数据。
nwsw7zdq2#
修改代码如下:
package main import ( "encoding/json" "fmt" ) func main() { var data = []byte(`{"amount":1.0282E+7}`) var res Response json.Unmarshal(data, &res) fmt.Println(res) } type Response struct { Amount float64 `json:"amount"` }
字符串输出量:
{1.0282e+07}
ymdaylpp3#
结构体中的Amount字段是 int64,但您试图从字符串中解析的数字是 float(以科学计数法表示)。试试这个:
type Response struct { Amount float64 `json:"amount"` }
字符串
3条答案
按热度按时间fhity93d1#
既然你没有解释你想要的确切结果,我们只能猜测。但是你有三种通用的方法来实现这一点:
1.解封为浮点类型而不是整数类型。如果你需要一个int,你可以稍后转换成一个int。
1.解封为
json.Number
类型,该类型保留完整的JSON表示及其精度,并且可以根据需要转换为int或float。1.使用自定义的解组器,它可以为您从float类型转换为int类型。
所有这三个都在这里演示:
字符串
See it in the playground的数据。
nwsw7zdq2#
修改代码如下:
字符串
输出量:
型
ymdaylpp3#
结构体中的Amount字段是 int64,但您试图从字符串中解析的数字是 float(以科学计数法表示)。
试试这个:
字符串