gpt4 book ai didi

json - golang 将接口(interface)数组转换为字符串

转载 作者:IT王子 更新时间:2023-10-29 00:53:59 28 4
gpt4 key购买 nike

我从远程源读取 JSON 数据并将其转换为 map 。数据中有一些数组,我想检查其中的字符串值。转换后我认为 m["t"] 是一个接口(interface)数组。 fmt.Print 将其转换为控制台上的打印文本,但我想不出一种方法来进行简单的字符串比较,例如

if val[0] == "str-c" {fmt.Println("success")}

我如何遍历它并进行字符串比较?

package main

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"
fmt.Println(m["t"])
}

最佳答案

m["t"]interface{} 类型并且是完整数组,如果您想获取 str-b它位于索引 1 处,您必须进行一些类型断言才能将其作为字符串获取。这是一个例子; 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

关于json - golang 将接口(interface)数组转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33924131/

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