Декодированное значение JSON обрабатывается как float64 вместо int - PullRequest
1 голос
/ 31 марта 2019

У меня есть ответ json от API: map[message:Login Success. userid:1]

Сервер:

c.JSON(200, gin.H{"message": "Login Success.", "userid": 1})

Клиент:

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
}

Но userID, ok := result["userid"].(int) всегда терпит неудачу.Я даже пытался использовать:

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")      
}

И это просто дало мне неизвестно .Почему целое число не воспринимается как целое число?


Похоже, что значение трактуется как float64.

1 Ответ

3 голосов
/ 31 марта 2019

Здесь вы можете найти объяснение, почему вы получаете float64, а не int:

Проверить документ для Декодировать

Подробнее о преобразовании JSON в значение Go см. В документации по Unmarshal.

А там см.

Чтобы демонтировать JSON в значение интерфейса, Unmarshal сохраняет одно из них в значении интерфейса:

float64, for JSON numbers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...