I have a json response from a api as map[message:Login Success. userid:1]
Server:
c.JSON(200, gin.H{"message": "Login Success.", "userid": 1})
Client:
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
msg, ok := result["message"].(string)
if !ok {
msg = "Something went wrong."
}
userID, ok := result["userid"].(int)
if !ok {
userID = 0
}
But userID, ok := result["userid"].(int) always fails. I've even tried using:
switch v := x.(type) {
case nil:
fmt.Println("x is nil")
case int:
fmt.Println("x is", v)
case bool, string:
fmt.Println("x is bool or string")
default:
fmt.Println("type unknown")
}
And it just gave me unknown. Why is the integer not being taken as integer?
It looks like its treating the value as float64.
Here you can find the explanation why you are getting float64 and not int:
Check doc for Decode
See the documentation for Unmarshal for details about the conversion of JSON into a Go value.
And there see
To unmarshal JSON into an interface value, Unmarshal stores one of these in the interface value:
float64, for JSON numbers
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With