当我尝试迭代一些json的地图时,我遇到了问题。
原始JSON数据如下所示:
"dataArray": [
{
"name": "default",
"url": "/some/url"
},
{
"name": "second",
"url": "/another/url"
}
]
地图如下所示:
[map[name:default url:/some/url] map[name:second url:/another/url]]
代码如下所示:
for _, urlItem := range item.(map[string]interface{}){
do some stuff
}
这通常在它是JSON对象时有效,但这是JSON中的一个数组,我收到以下错误:
恐慌:界面转换:interface {}是[] interface {},而不是map [string] interface {}
非常感谢任何帮助
答案 0 :(得分:4)
错误是:
您在代码中恐慌:界面转换:interface {}是[] interface {},而不是 map [string] interface {}
将item
转换为map[string]interface{}
:
for _, urlItem := range item.(map[string]interface{}){
do some stuff
}
但实际item
为[]interface {}
:将您的隐蔽类型更改为此。
因为您可以看到结果数据是:
[map[name:default url:/some/url] map[name:second url:/another/url]]
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
}