我在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://go.dev/play/p/dxv8k4pI7uX
我希望收到文件列表,因此响应应该是:
file_1 file.jpg file_2 file.png
但是这段代码返回了错误:
panic: interface conversion: interface {} is []interface {}, not map[string]interface {}我做错什么了?
发布于 2022-10-17 18:10:00
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相同。
https://stackoverflow.com/questions/74101312
复制相似问题