go - 如何在 GO 的 json.RawMessage 中检查 KEY 是否存在?

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

回答:

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

感谢大师

最佳答案

error: index out of range 意味着 userList 没有索引 [0] 的值,而不是空的 LastName

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

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

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

关于go - 如何在 GO 的 json.RawMessage 中检查 KEY 是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55707507/

相关文章:

go - 确保 net/http 客户端通过 TLS 1.2 连接的传输选项

go - "net/http"使用全局变量在golang中被认为是一种好的做法吗?

javascript - 前端从后端获取错误数据

go - 带有 html 模板的路由和没有 Golang 的路由之间每秒请求数的巨大差异

json - 有没有一种方法可以从 http 响应中提取 JSON 而无需构建结构?

go - 有人可以帮我简化一下 go mod init 吗?

go - 通过 Exim(没有 smtp)发送电子邮件?

google-app-engine - 使用 go 和应用引擎的数据存储导入和解析大型 CSV 文件

string - 如何在Go中获取所有ASCII字符?

pointers - 当我们说 uintptr 存储指针值的未解释位时,这意味着什么?