亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用 sql.NullFloat64 包裝 json.Number

用 sql.NullFloat64 包裝 json.Number

Go
一只斗牛犬 2022-06-27 17:02:56
我正在使用具有 json 值的 API,該值可以是數字或字符串,有時可以是空字符串。例如:[    {        "Description": "Doorknob",        "Amount": 3.25    },    {        "Description": "Light bulb",        "Amount": "4.70"    },    {        "Description": "Screwdriver",        "Amount": ""    }]我了解到我可以使用 json.Number 來處理值可以是數字或字符串的情況。但是我該如何處理它是一個空字符串的情況呢?我需要將這些值插入到 postgres 數據庫中,所以我希望它是一個空字符串來顯示,null并且我認為 sql.NullFloat64 最適合處理它。這是我正在使用的一個功能,它適用于前兩種情況(門把手和燈泡),但無法解開最后一種情況(“螺絲刀”)。這是我正在嘗試使用的解組函數,但我不知道為什么它不起作用: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
查看完整描述

1 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

您快到了!當給定一個空字符串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


查看完整回答
反對 回復 2022-06-27
  • 1 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號