我正在使用具有 json 值的 API,該值可以是數(shù)字或字符串,有時(shí)可以是空字符串。例如:[ { "Description": "Doorknob", "Amount": 3.25 }, { "Description": "Light bulb", "Amount": "4.70" }, { "Description": "Screwdriver", "Amount": "" }]我了解到我可以使用 json.Number 來處理值可以是數(shù)字或字符串的情況。但是我該如何處理它是一個(gè)空字符串的情況呢?我需要將這些值插入到 postgres 數(shù)據(jù)庫中,所以我希望它是一個(gè)空字符串來顯示,null并且我認(rèn)為 sql.NullFloat64 最適合處理它。這是我正在使用的一個(gè)功能,它適用于前兩種情況(門把手和燈泡),但無法解開最后一種情況(“螺絲刀”)。這是我正在嘗試使用的解組函數(shù),但我不知道為什么它不起作用: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}這是我應(yīng)該為金額使用開放接口的情況嗎?非常感謝任何幫助。操場(chǎng): https: //play.golang.org/p/QYQRq94OtV3
1 回答

藍(lán)山帝景
TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
您快到了!當(dāng)給定一個(gè)空字符串json.Unmarshal時(shí)調(diào)用錯(cuò)誤。json.Number
預(yù)先添加此檢查:
// 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 關(guān)注
- 128 瀏覽
添加回答
舉報(bào)
0/150
提交
取消