gpt4 book ai didi

json - 用sql.NullFloat64包装json.Number

转载 作者:行者123 更新时间:2023-12-01 21:09:22 24 4
gpt4 key购买 nike

我正在使用具有json值的API,该json值可以是数字或字符串,有时可以是空字符串。例如:

[
{
"Description": "Doorknob",
"Amount": 3.25
},
{
"Description": "Light bulb",
"Amount": "4.70"
},
{
"Description": "Screwdriver",
"Amount": ""
}
]
我知道我可以使用json.Number来处理值可以是数字或字符串的情况。但是,如何处理空字符串呢?
我需要将这些值插入到postgres数据库中,因此我希望它是一个空字符串以 null形式显示,并且我认为sql.NullFloat64最适合处理它。
这是我正在使用的功能,可在前两种情况下使用(门 Handlebars 和灯泡),但无法解码最后一种情况(“ Screwdriver ”)。
这是我要使用的解编函数,但是我无法弄清楚为什么它不起作用:
type NullNumber struct{ sql.NullFloat64 }

func (nn *NullNumber) UnmarshalJSON(data []byte) error {
var x *json.Number
if err := json.Unmarshal(data, &x); err != nil {
return err
}
if len(*x) == 0 {
nn.Valid = false // This doesn't seem to be working. Why?
}
this, err := x.Float64()
if err != nil {
return err
}
nn.Valid = true
nn.Float64 = this
return nil
}
这是我应该使用开放式界面支付金额的情况吗?
任何帮助都非常感谢。
游乐场: https://play.golang.org/p/QYQRq94OtV3

最佳答案

你快到了!给json.Unmarshal一个空字符串时,json.Number调用错误。
预先添加此检查:

// edge case: json.Number is given an empty string
if bytes.Equal(data, []byte(`""`)) {
nn.Valid = false
return nil
}
https://play.golang.org/p/ILxC8tjYI_G

关于json - 用sql.NullFloat64包装json.Number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63872248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com