尝试迭代json数组的映射时Golang接口转换错误

时间:2017-03-30 15:16:00

标签: json loops go

当我尝试迭代一些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 {}

非常感谢任何帮助

1 个答案:

答案 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]]

arraymap。不是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
}