как проверить KEY на наличие в json.RawMessage на GO? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть:

type User struct {
    UID                     int          `json:"id"`
    FirstName               string       `json:"first_name"`
    LastName                string       `json:"last_name"`
    Sex                     int          `json:"sex"`
    Nickname                string       `json:"nickname"`
    ScreenName              string       `json:"screen_name"`
    BDate                   string       `json:"bdate"`

}

код:

var userList []*User
json.Unmarshal(resp.Response, &userList)

ответ сервера может быть:

[{"id":1,"first_name":"name","last_name":"last","sex":2,"nickname":"","screen_name":"screen","bdate":"1.1.1"}]

или

[{"id":1,"first_name":"name","sex":2,"nickname":"","screen_name":"screen"}]

моя проблема при вызове несуществующей ошибки выполнения KEY "userList[0].LastName":

error: index out of range

, в первом случае сервер вернул:

"last_name":"last" and "bdate":"1.1.1"

, во втором нет

Когда нет пользователя, сервер возвращает.

[{"error_code": 0, "error_msg": "Invalid user id"}]

ответ:

    if len(userList) > 0 {
            c.String(http.StatusOK, "People name: %s", userList[0].FirstName)
        } else {
            c.String(http.StatusOK, "No People: %s", login)
        }

Спасибо Magestro

1 Ответ

0 голосов
/ 16 апреля 2019

error: index out of range означает, что userList не имеет значения с индексом [0], а не пустым LastName

В вашем примере все отлично работает: https://play.golang.org/p/WHIqgB52w_I

Вы уверены, что сервер возвращает допустимую строку и что эта строка существует в resp.Response?

Попробуйте напечатать resp.Response и найдите ошибку в другом месте

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