为了账号安全,请及时绑定邮箱和手机立即绑定

如何在golang中将字符串从接口转换为[]字符串?

如何在golang中将字符串从接口转换为[]字符串?

Go
慕尼黑的夜晚无繁华 2022-01-10 17:24:07
我正在解析一个包含字符串数组的 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。我不想将看起来像数组的字符串转换为数组。
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

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


无论如何,这种转换不起作用,因为切片内的类型不是string,它们也是interface{}. 您必须迭代集合,然后对每个项目进行类型断言,如下所示:


aInterface := data["aString"].([]interface{})

aString := make([]string, len(aInterface))

for i, v := range aInterface {

    aString[i] = v.(string)

}


查看完整回答
反对 回复 2022-01-10
?
MMTTMM

TA贡献1869条经验 获得超4个赞

这是你需要的吗?


package main


import (

    "fmt"

    "encoding/json"

)


func main() {

    js := "{\"aString\": [\"aaa_111\", \"bbb_222\"], \"whatever\":\"ccc\"}"

    a := make(map[string]interface{})

    json.Unmarshal([]byte(js), &a)

    for _, v := range a["aString"].([]interface{}) {

        str := v.(string)

        fmt.Println(str)

    }

}


查看完整回答
反对 回复 2022-01-10
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

对于另一种方法,您可以使用 astruct代替:


package main


import (

   "encoding/json"

   "fmt"

)


func main() {

   s := []byte(`{"aString": ["aaa_111", "bbb_222"], "whatever":"ccc"}`)

   var t struct {

      Astring []string

      Whatever string

   }

   json.Unmarshal(s, &t)

   fmt.Printf("%+v\n", t) // {Astring:[aaa_111 bbb_222] Whatever:ccc}

}


查看完整回答
反对 回复 2022-01-10
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号