如何检查KEY在json.RawMessage中是否存在?

时间:2019-04-16 11:51:09

标签: go

我有一个:

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

answer:

    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 :(得分:0)

error: index out of range表示userList没有索引为[0]的值,而不是空的LastName

在您的示例中,一切正常:https://play.golang.org/p/WHIqgB52w_I

确定服务器返回有效字符串并且该字符串存在于resp.Response中吗?

尝试打印resp.Response,然后在其他地方查找错误