我正在解析一个包含字符串数组的JSON对象:
var ii interface{}
json := "{\"aString\": [\"aaa_111\", \"bbb_222\"], \"whatever\":\"ccc\"}"
err := json.Unmarshal([]byte(json), &ii)
if err != nil {
log.Fatal(err)
}
data := ii.(map[string]interface{})
fmt.Println(data["aString"]) // outputs: ["aaa_111" "bbb_222"]
我试图将data["aString"]
转换为[]string
,以便能够循环遍历它,但是失败了:
test := []string(data["aString"]).([]string)
fmt.Println(test) // panic -> interface conversion:
// interface is string, not []string
我该如何转换data["aString"]
?
编辑:
我表达不清楚。如果我打印data
,我有这样一个映射:
map[aString:["BBB-222","AAA-111"] whatever:ccc]
我想遍历aString(操作每个数组条目)。但我找不到方法,因为aString是type interface {}
类型:
for i, v := range aString { // <-- fails
// ...
fmt.Println(i, v)
}
这就是为什么我想要转换aString。我不想将一个看起来像数组的字符串转换成数组。
ii
应该已经是一个map[string]interface {}
了... 我看不出来为什么要进行类型断言data := ii.(map[string]interface {})
。修复这个问题并不能解决你的问题,我只是注意到了它。 - SnowmanaStringValue := ii.(map[string]interface {})["aString"]
- Snowman