我正在使用具有 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
- 1 回答
- 0 關注
- 127 瀏覽
添加回答
舉報
0/150
提交
取消