我正在开发一个 RESTful API,需要确定用户发送了什么。假设这是 JSON 格式的 POST 请求的主体:{ "request": "reset-users", "parameters": [ { "users": ["userA","userB","userC"] } ]}使用json.Unmarshal,我将正文读入这个标准化结构:type RequestBody struct { Request string `json:"request"` Parameters []map[string]interface{} `json:"parameters"`}所以,现在,我可以requestBody.Parameters[0]["users"]使用以下类型断言开关块检查类型:switch requestBody.Parameters[0]["users"].(type) { case []interface {}: //It is actually a list of some type default: //Other types}上面提到的代码有效,但我如何才能确定某种类型的列表是字符串列表?(相对于 int 或 bool 的列表...)
2 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
当解组为 时interface{}
,标准库解组器总是使用以下内容:
map[string]interface{}
对于对象[]interface{}
对于数组string
,bool
,float64
,nil
对于值
因此,当您获得 a 时[]interface{}
,它是一个数组,其元素可以是上述任何一种类型。您必须遍历每个并键入断言:
switch v:=requestBody.Parameters[0]["users"].(type) {
case []interface {}:
for _,x:=range v {
if s, ok:=x.(string); ok {
// It is a string
}
}
...
}
神不在的星期二
TA贡献1963条经验 获得超6个赞
文档清楚地说明了它将使用什么类型:“[]interface{}, for JSON arrays”。它将始终是[]interface{}
,这是一个具体类型,不能断言为任何其他类型;不可能[]string
,因为那是与 不同的类型[]interface{}
。的每个元素都[]interface{}
可以是文档中列出的任何类型,具体取决于原始 JSON 数组的每个元素的类型。
- 2 回答
- 0 关注
- 170 浏览
添加回答
举报
0/150
提交
取消