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

golang 将接口数组转换为字符串

golang 将接口数组转换为字符串

Go
忽然笑 2021-11-22 19:28:12
我从远程源读取 JSON 数据并将其转换为地图。数据中有一些数组,我想检查其中的字符串值。转换后我认为 m["t"] 是一个接口数组。fmt.Print 将其转换为控制台上的打印文本,但我无法找到一种方法来进行简单的字符串比较,例如if val[0] == "str-c" {fmt.Println("success")}我如何遍历它并进行字符串比较?package mainimport (    "fmt"    "encoding/json")func main() {    var m map[string]interface{}    sJSON := `{"k": "v", "t":["str-a","str-b","str-c"]}`    _ = json.Unmarshal([]byte(sJSON),&m)    // find out if one of the string values of "t" is "str-b"    fmt.Println(m["t"]) }
查看完整描述

1 回答

?
翻过高山走不出你

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

m["t"]是类型interface{}并且是完整的数组,如果你想得到str-b它是在索引一,你必须做一些类型断言来得到它作为一个字符串。这是一个例子;https://play.golang.org/p/W7ZnMgicc7


如果你想在看起来像这样的集合中检查它;


包主


import (

    "fmt"

    "encoding/json"

)


func main() {

    var m map[string]interface{}

    sJSON := `{"k": "v", "t":["str-a","str-b","str-c"]}`

    _ = json.Unmarshal([]byte(sJSON),&m)


    // find out if one of the string values of "t" is "str-b"

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

         if v.(string) == "str-b" {

              fmt.Println("match found!")

         }

    }

    //fmt.Println(m["t"].([]interface{})[1].(string)) 

}

https://play.golang.org/p/vo_90bKw92


如果你想避免这种“拆箱”的东西,我建议你这样做,你可以定义一个结构来解组,它看起来像这样;


type MyStruct struct {

     K string `json:"k"`

     T []string `json:"t"`

}

然后,您可以在T没有任何类型断言的情况下进行范围检查并在此处进行比较,工作示例; https://play.golang.org/p/ehPxOygGf5


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 285 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信