2 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
對(duì)于一般情況,您可以interface{}按照Burak Serdar 的回答中所述使用。
特別是對(duì)于數(shù)字,有json.Number一種類型:它接受 JSON 數(shù)字和 JSON 字符串,如果它以字符串形式給出,它可以“自動(dòng)”解析數(shù)字Number.Int64()or Number.Float64()。不需要自定義編組器/解組器。
type Cart struct {
Description string `json:"Description"`
Amount json.Number `json:"Amount"`
}
測試它:
var (
cart1 = []byte(`{
"Description": "Doorknob",
"Amount": "3.25"
}`)
cart2 = []byte(`{
"Description": "Lightbulb",
"Amount": 4.70
}`)
)
func main() {
var c1, c2 Cart
if err := json.Unmarshal(cart1, &c1); err != nil {
panic(err)
}
fmt.Printf("%+v\n", c1)
if err := json.Unmarshal(cart2, &c2); err != nil {
panic(err)
}
fmt.Printf("%+v\n", c2)
}
輸出(在Go Playground上試試):
{Description:Doorknob Amount:3.25}
{Description:Lightbulb Amount:4.70}

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果該字段可以是字符串或 int,則可以使用 interface{},然后找出底層值:
type Cart struct {
Description string `json:"Description"`
Amount interface{} `json:"Amount"`
}
func (c Cart) GetAmount() (float64,error) {
if d, ok:=c.Amount.(float64); ok {
return d,nil
}
if s, ok:=c.Amount.(string); ok {
return strconv.ParseFloat(s,64)
}
return 0, errors.New("Invalid amount")
}
- 2 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)