【发布时间】:2016-05-19 16:36:22
【问题描述】:
我正在解析一个包含字符串数组的 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的原因。我不想将 看起来像 数组的字符串转换为数组。
【问题讨论】:
-
你知道你的 JSON 的确切结构吗? (这些字段是否明确定义或可能会有所不同)
-
您的 var
ii应该已经是map[string]interface {}... 我认为没有理由进行类型断言data := ii.(map[string]interface {})。修复它并不能解决您的问题,我刚刚注意到它。 -
试试这个
aStringValue := ii.(map[string]interface {})["aString"]
标签: go