目前编程网上已经有很多关于golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《混淆:interface转换:接口 {} 应该是接口 {} 而不是mapinterface
目前编程网上已经有很多关于golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《混淆:interface转换:接口 {} 应该是接口 {} 而不是mapinterface {}》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~
问题内容我在 go 中有一个简单的程序来解析 JSON:
package main
import (
"encoding/json"
"fmt"
)
func main() {
jsondata := `{"aaa": {"bbb": {"ccc": [{"file_1": "file.jpg", "file_2": "file.png"}]}}}`
var result map[string]map[string]map[string]interface{}
json.unmarshal([]byte(jsondata), &result)
files := result["aaa"]["bbb"]["ccc"].(map[string]interface{})
for key, value := range files {
fmt.println(key, value)
}
}
https://www.lsjlt.com/file/imgs/upload/202404/05/be2xw13pjsi.jpg file_2 文件.png
但此代码返回错误:
panic: interface conversion: interface {} is []interface {}, not map[string]interface {}
我做错了什么?
result["aaa"]["bbb"]["ccc"]
的类型是 []interface{}
,因为 json 具有映射数组。
一种解决方案是更改 result
的声明以匹配 json 架构:
var result map[string]map[string]map[string][]map[string]string
或者,您可以保留 interface{}
的定义,但您需要执行额外的步骤来在每个级别执行类型断言:
var result map[string]map[string]map[string]interface{}
json.Unmarshal([]byte(jsonData), &result)
fileList := result["aaa"]["bbb"]["ccc"].([]interface{})
for _, fileI := range fileList {
for key, value := range fileI.(map[string]interface{}) {
fmt.Println(key, value.(string))
}
}
编辑:第二种方法与上面评论中的 @icza 相同。
以上就是《混淆:interface转换:接口 {} 应该是接口 {} 而不是mapinterface {}》的详细内容,更多关于的资料请关注编程网公众号!
--结束END--
本文标题: 混淆:interface转换:接口 {} 应该是接口 {} 而不是mapinterface {}
本文链接: https://lsjlt.com/news/595657.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0