gpt4 book ai didi

go - 如何将字符串从接口(interface)转换为golang中的[]字符串?

转载 作者:IT王子 更新时间:2023-10-29 01:07:05 31 4
gpt4 key购买 nike

我正在解析一个包含字符串数组的 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 :

map[aString:["BBB-222","AAA-111"] whatever:ccc]

我想遍历 aString(以处理每个数组条目)。但我找不到方法,因为 aString 是 type interface {} :

for i, v := range aString { // <-- fails
// ...
fmt.Println(i, v)
}

这就是为什么我要转换aString。我不想将看起来像数组的字符串转换为数组。

最佳答案

我建议您总体上远离此实现。您的 json 可能会有所不同,但您可以轻松使用对象并避免所有此类不安全的废话。

无论如何,该转换不起作用,因为 slice 内的类型不是 string,它们也是 interface{}。您必须迭代集合,然后像这样对每个项目进行类型断言:

aInterface := data["aString"].([]interface{})
aString := make([]string, len(aInterface))
for i, v := range aInterface {
aString[i] = v.(string)
}

关于go - 如何将字符串从接口(interface)转换为golang中的[]字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37329246/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com