1 回答
TA贡献1871条经验 获得超13个赞
使用一个接口,无论您从 json 响应中获取的格式是什么,并将响应解组到接口中:
func main(){
var result interface{}
if err := json.Unmarshal(jsonbytes, &result); err != nil{
fmt.Println(err)
}
}
然后使用类型断言获取接口下的值。但我认为在你的情况下,如果你没有密钥的基础类型。更好的方法是使用递归来获取值。
func fetchValue(value interface{}) {
switch value.(type) {
case string:
fmt.Printf("%v is an interface \n ", value)
case bool:
fmt.Printf("%v is bool \n ", value)
case float64:
fmt.Printf("%v is float64 \n ", value)
case []interface{}:
fmt.Printf("%v is a slice of interface \n ", value)
for _, v := range value.([]interface{}) { // use type assertion to loop over []interface{}
fetchValue(v)
}
case map[string]interface{}:
fmt.Printf("%v is a map \n ", value)
for _, v := range value.(map[string]interface{}) { // use type assertion to loop over map[string]interface{}
fetchValue(v)
}
default:
fmt.Printf("%v is unknown \n ", value)
}
}
Go 操场上的工作代码
上面的代码可以让你获取解析到接口中的任何类型的值。
笔记:
在 golang 中定义了当您将未知的 json 解组到接口中时。它将转换为以下类型:
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays // slice of interface{}
map[string]interface{}, for JSON objects
nil for JSON null
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报