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

Pau*_*son 3 json loops go

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

任何帮助将不胜感激

Guj*_*ana 5

错误是:

恐慌:接口转换:interface {} 是 []interface {},而不是 map[string]interface {}

在你的代码中你要转换itemmap[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)

它是一个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
}
Run Code Online (Sandbox Code Playgroud)