I'm parsing a JSON object which contains an array of strings :
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"] I tried to convert data["aString"] to []string to be able to loop over it, but it fails :
test := []string(data["aString"]).([]string) fmt.Println(test) // panic -> interface conversion: // interface is string, not []string How can I convert data["aString"] ?
edit:
I didn't express myself properly. If I print data, I have such map :
map[aString:["BBB-222","AAA-111"] whatever:ccc]
I want to loop over aString (to manipule each array entry). But I can't find how, because aString is type interface {} :
for i, v := range aString { // <-- fails // ... fmt.Println(i, v) } That's why I want to convert aString. I don't want to convert a string which looks like an array to an array.
iishould already be amap[string]interface {}... I see no reason to do the type assertiondata := ii.(map[string]interface {}). Fixing that doesn't solve your problem, I just noticed it.aStringValue := ii.(map[string]interface {})["aString"]