当我尝试迭代某些 json 的映射时遇到问题。
原始 JSON 数据如下所示:
"dataArray": [
{
"name": "default",
"url": "/some/url"
},
{
"name": "second",
"url": "/another/url"
}
]
Run Code Online (Sandbox Code Playgroud)
地图看起来像这样:
[map[name:default url:/some/url] map[name:second url:/another/url]]
Run Code Online (Sandbox Code Playgroud)
代码如下所示:
for _, urlItem := range item.(map[string]interface{}){
do some stuff
}
Run Code Online (Sandbox Code Playgroud)
当它是 JSON 对象时,这通常有效,但这是 JSON 中的数组,我收到以下错误:
恐慌:接口转换:interface {} 是 []interface {},而不是 map[string]interface {}
任何帮助将不胜感激
错误是:
恐慌:接口转换:interface {} 是 []interface {},而不是 map[string]interface {}
在你的代码中你要转换item
成map[string]interface{}
:
for _, urlItem := range item.(map[string]interface{}){
do some stuff
}
Run Code Online (Sandbox Code Playgroud)
但实际情况item
是[]interface {}
:将你的隐藏类型更改为此。
因为如您所见,您的结果数据是:
[map[name:default url:/some/url] map[name:second url:/another/url]]
Run Code Online (Sandbox Code Playgroud)
它是一个array
有map
。不是map
。
首先,您可以将数据转换为[]interface{}
,然后获取该数据的索引并将其转换为map[string]interface{}
. 所以一个例子如下:
data := item.([]interface{})
for _,value := range data{
yourMap := value.(map[string]interface{})
//name value
name := yourMap["name"].(string) // and so on
}
Run Code Online (Sandbox Code Playgroud)